打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何把DLL嵌入到exe文件中?? embed DLL in MFC C++ EXE

Is it possible to embed an external CLI/C++ DLL into a MFC EXE as a embedded resource or something like that? My application currently connects to DLL sitting right beside it that has some basic functions like connect to database, pull information from DB, etc..

I use LoadLibrary to use the DLL functions. Then I secure my EXE with themida and pack the EXE and DLL together. The problem is though to pack the DLL and EXE I have to disable file patching in themida which is a very strong feature. I have to disable it because when I pack my EXE it needs to modify the file a bit, and then themida thinks it has been cracked or something and does not allow the application to work.

So is there a way to embed this DLL into my EXE? The DLL is not compatible with themida sadly which is why it is a separate file.


add comment

2 Answers

1) Add a Resource Script file in the executable project.

IDR_DLL_BIN        BINARY  MOVEABLE PURE   “..\\debug\\myextern.dll

2) Compile RC file to RES file using the Resource Compiler:

rc.exe /fo Release/mydll.res “.\mydll.rc 

If you are using Visual Studio, it will build the RES file and will also bind it with executable.

3) Find and load the resource from the executable:

bool ExtractResource(const HINSTANCE hInstance, WORD resourceID, LPCTSTR szFilename){  bool bSuccess = false;   try  {      // Find and load the resource      HRSRC hResource = FindResource(hInstance, MAKEINTRESOURCE(resourceID), _T(“BINARY”));      HGLOBAL hFileResource = LoadResource(hInstance, hResource);      // Open and map this to a disk file      LPVOID lpFile = LockResource(hFileResource);      DWORD dwSize = SizeofResource(hInstance, hResource);                  // Open the file and filemap      HANDLE hFile = CreateFile(szFilename, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);      HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, dwSize, NULL);                  LPVOID lpAddress = MapViewOfFile(hFileMap, FILE_MAP_WRITE, 0, 0, 0);                  // Write the file      CopyMemory(lpAddress, lpFile, dwSize);                  // Un-map the file and close the handles      UnmapViewOfFile(lpAddress);      CloseHandle(hFileMap);      CloseHandle(hFile);   }   catch(…)   {        // Whatever   }    return bSuccess; }
share|improve this answer


将所用到的dll和exe打包成一个exe,比如enigma virtual box之类
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
如何在win32 Application 中使用MFC(转)
在VC++ 6.0下应用Win32系统钩子技术
MFC 如何使用动态链接库中的资源
DLL导出资源问题的解决
Main.obj : error LNK2001 solved
MFC 没有找到MFC80D.DLL的解决方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服