谁做过这种蠢事?

Jackie 2006-03-14 02:54:48
把dll/ocx加到资源文件中,用时读入内存?如何实现?难吗?
...全文
245 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wawaku 2006-03-22
  • 打赏
  • 举报
回复
这样也可以?
slwang2003 2006-03-22
  • 打赏
  • 举报
回复
顶一哈
清歌谁与和 2006-03-21
  • 打赏
  • 举报
回复
关注
whwjn 2006-03-21
  • 打赏
  • 举报
回复
bool 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 CRunOnceApp::LoadSkin()
{
//查找皮肤文件和皮肤动态库是否存在
CString szDll = "SkinLoad.dll",szSkin = "xp_normal.skin";
CFileFind find;
if(!find.FindFile(szDll)) g_MakeResourceFromExe(szDll,"OWNER_DATA",IDR_SKIN_DLL);
if(!find.FindFile(szSkin)) g_MakeResourceFromExe(szSkin,"OWNER_DATA",IDR_SKIN_XP);
find.Close();

//加载动态库
m_hDllSkin = LoadLibrary("SkinLoad.dll");
if(m_hDllSkin != NULL)
{
typedef int (* INITSKIN)(DWORD dwThreadId);
typedef bool (* LOADSKIN)(CString szPath);
INITSKIN pInitSkin = (INITSKIN)GetProcAddress(m_hDllSkin,"InitSkinLoad");
LOADSKIN pLoadSkin = (LOADSKIN)GetProcAddress(m_hDllSkin,"LoadSkin");
if(pInitSkin != NULL)
{
(*pInitSkin)(GetCurrentThreadId());
(*pLoadSkin)("xp_normal.skin");
}
}
}
CodeProject-Jerry 2006-03-18
  • 打赏
  • 举报
回复
可以加密到资源里面

运行的时候解密 直接运行内存中的程序

liutaoxwl 2006-03-15
  • 打赏
  • 举报
回复
我不知道能不能实现,你试试看
比如你的a.dll在a.exe的资源里面,a.exe的代码应该这样
LoadLibrary("res://绝对路径\\a.exe/id");
其中id是a.dll在a.exe里面的资源id。
louifox 2006-03-14
  • 打赏
  • 举报
回复
哈哈我做過,我在写自动升级程序的时候曾经把exe文件放到资源里面,很简单的

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧