在MFC C++EXE中嵌入DLL
embed DLL in MFC C++ EXE?
是否可以将外部CLI/C++DLL作为嵌入资源或类似资源嵌入到MFC EXE中?我的应用程序当前连接到它旁边的DLL,该DLL具有一些基本功能,如连接到数据库、从数据库提取信息等
我使用LoadLibrary来使用DLL函数。然后我用themida保护我的EXE,并将EXE和DLL打包在一起。问题是要打包DLL和EXE,我必须禁用themida中的文件修补,这是一个非常强大的功能。我必须禁用它,因为当我打包EXE时,它需要对文件进行一点修改,然后themida认为它已经被破解或其他什么,不允许应用程序工作。
那么有没有办法把这个DLL嵌入到我的EXE中呢?遗憾的是,DLL与themida不兼容,这就是为什么它是一个单独的文件。
1)在可执行项目中添加资源脚本文件。
IDR_DLL_BIN BINARY MOVEABLE PURE "..\debug\myextern.dll"
2) 使用资源编译器将RC文件编译为RES文件
rc.exe /fo "Release/mydll.res" ".mydll.rc"
如果您使用的是Visual Studio,它将构建RES文件,并将其与可执行文件绑定。
3) 从可执行文件中查找并加载资源:
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;
}
您可以尝试使用Enigma虚拟盒子。这将把DLL打包到EXE中,以便LoadLibrary
"正常工作"。当然,如果它是C++/CLI DLL,那么您仍然需要安装.NET框架。
相关文章:
- 在 MFC dll 中包含助推互斥头文件时断言
- MFC:重写附属 DLL 中 RC 文件中的位图路径
- MFC/DLL中缺少ATL :: CSTRINGT功能,该功能与Clang/vs-2019构建
- 如何初始化堆,以便静态构造函数可以在常规 MFC dll 中使用堆?
- MFC App中的QT DLL-如何使Qdialog *真正 *模式
- 添加新对话框后,MFC 应用程序启动失败并"DLL Initialization Failed"
- 如何从MFC DLL中获取与COM包裹的C#对象的接口
- 在 MFC 扩展 DLL 中使用 BCGControlBar
- 使用P/Invoke从MFC DLL函数中读取VB.NET中的结构化数据
- 在swig.i文件中,如何为基于mfc的第三方dll解析ms-windows-vc++typedef类型
- MFC C++语言资源DLL-仅覆盖某些对话框
- 创建非托管常规 MFC DLL 并从托管 C++ .NET 应用调用它时出现问题
- 本地化基于 MFC 的 DLL
- 使用 VS2010 MFC + 测试应用的简单 DLL
- 获取线路错误 MFC vs2012 (msvcp110.dll)
- MFC-在dll卸载时,扫描我的代码,任何剩余的计时器,事件,线程等
- 在 MFC DLL 中的 CDialog 派生对象中使用 CScrollView 派生对象
- 命令和UPDATE_COMMAND_UI处理程序未在 MFC dll 中调用
- 具有 MFC 和静态链接的 Dll
- DLL中的CImage析构函数会阻塞整个MFC程序