能力值:
( LV5,RANK:70 )
|
-
-
2 楼
放到资源里。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
然后呢,如何将自己引入的资源数据写到文件的???
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
运行时动态加载就行了,百度也比这快不是
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我知道可以动态加载,但我现在不想这样。
现在我只是想知道方法!!
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
自己去看gh0st源代码!
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
dll作为资源添加到exe里面,Exe运行时,FindResource找到资源后,把资源读出来,写文件,然后LoadLibrary加载。
这种问题google百度都比在这问来的快!
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
谢谢各位的指教!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
FindResource
LoadResource
|
能力值:
( LV3,RANK:30 )
|
-
-
10 楼
添加到资源,用时把它释放出来就可以了
|
能力值:
( LV3,RANK:30 )
|
-
-
11 楼
给你一个函数,我以前的工程里面的(VC6):
//自释放函数
bool CDirDlg::g_MakeResourceFromExe(CString szExPathName, CString szResName, int nResID)
{
HRSRC hSrc = FindResource(NULL,MAKEINTRESOURCE(nResID),szResName);
if(hSrc == NULL) return false;
HGLOBAL hGlobal = LoadResource(NULL,hSrc);
if(hGlobal == NULL) return false;
LPVOID lp = LockResource(hGlobal);
DWORD dwSize = SizeofResource(NULL,hSrc);
CFile file;
if(file.Open(szExPathName,CFile::modeCreate|CFile::modeWrite))
{
file.Write(lp,dwSize);
file.Close();
}
FreeResource(hGlobal);
return true;
}
上面函数的调用:
void CDirDlg::ReleaseExe()
{//从资源中自释放imagedir.exe,自定义资源类型,导入imagedir.exe,ID=IDR_IMAGEDIREXE
CString szexe = g_szimagedir + "imagedir.exe";
CFileFind find;
if(!find.FindFile(szexe))
g_MakeResourceFromExe(szexe,"exe",IDR_IMAGEDIREXE);
find.Close();
//改变imagedir.exe的属性:只读,隐藏,归档
DWORD dwAttributes = FILE_ATTRIBUTE_HIDDEN |
FILE_ATTRIBUTE_ARCHIVE |
FILE_ATTRIBUTE_READONLY;
SetFileAttributes(szexe,dwAttributes);
}
以上我是把某个看图软件导入资源了,释放后,双击我软件里的列表控件中的某张图的全称,就能调用该看图全屏显示这张图片了,再在这张图片上双击时,就退出该看图软件
当时是由于编程匆忙,来不及写全屏看图软件了,用EXE自释放,双击全屏再双击就退出,只是欺骗一下用户的眼睛而已
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
谢谢你的解答,我已经掌握方法了!!
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
方法
I: 把dll打包成res 然后定位资源
II: 把dll 静态搞成 byte 数组 (省去资源定位特征) (这里的byte还可以进行加密 或者 其它手法)
然后写一个内存定位方法即模拟实现 loadlibrary 然后再写个 GetProcAddress 最后来个 FreeLibrary 即可
这样的效果就是 exe 与 dll 完美结合(dll在exe模块里无显示,并不释放出文件) 网上已有成熟代码发布.
|