Lan*_*ens 3 c++ mfc external loadlibrary command-line-interface
是否可以将外部CLI/C++ DLL作为嵌入式资源或类似内容嵌入到MFC EXE中?我的应用程序当前连接到它旁边的DLL,它具有一些基本功能,如连接数据库,从数据库中提取信息等.
我使用LoadLibrary来使用DLL函数.然后我用selfida保护我的EXE并将EXE和DLL打包在一起.问题是虽然打包DLL和EXE我必须在itida中禁用文件修补,这是一个非常强大的功能.我必须禁用它,因为当我打包我的EXE它需要稍微修改文件,然后itida认为它已被破解或某些东西,并且不允许应用程序工作.
那么有没有办法将这个DLL嵌入我的EXE?DLL遗憾地与它们不兼容,这就是为什么它是一个单独的文件.
1)在可执行项目中添加资源脚本文件.
IDR_DLL_BIN BINARY MOVEABLE PURE “..\\debug\\myextern.dll”
Run Code Online (Sandbox Code Playgroud)
2)使用资源编译器将RC文件编译为RES文件:
rc.exe /fo ”Release/mydll.res” “.\mydll.rc”
Run Code Online (Sandbox Code Playgroud)
如果您使用的是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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6959 次 |
最近记录: |