我正在尝试使用 Win32 FindResource() 函数将嵌入式资源加载到缓冲区中。 我在 Visual Studio 2015 IDE 中添加资源编译时间:
正如您使用 CFFexplorer 或 ResHacker 等 PE 编辑器所见,资源已正确添加:
当我在 DLL 项目开始时尝试使用 FindResource() 函数在运行时加载它时出现问题:
INT WINAPI DllMain( HINSTANCE hInstDLL, DWORD dwReason, LPVOID lpReserved )
{
HRSRC ResLocation = 0;
switch( dwReason )
{
case DLL_PROCESS_ATTACH:
// Show debug console
AllocConsole();
freopen("CONOUT$", "w", stdout);
//Locate our resource
ResLocation = FindResource(hInstDLL, "RESFILE", "RESFILE");
// FindResource returns NULL with error 1813: ERROR_RESOURCE_TYPE_NOT_FOUND
printf("TEST RESULT: reslocation: %i error %i\n", ResLocation, GetLastError());
StartProc();
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return 1;
}
FindResource 返回 NULL,错误 1813:ERROR_RESOURCE_TYPE_NOT_FOUND。 关于为什么它无法加载资源的任何想法? 谢谢
最佳答案
我找到问题所在了。
有另一个可执行文件在运行时在同一个 dll 上写入了另一个资源。 它使用 BeginUpdateResource() 完成此操作。
问题是 BeginUpdateResource() 第二个参数设置为 true:当添加新资源时,它会删除我在设计时添加的旧资源。将此参数设置为 false,解决了我的问题。
关于c++ - 尽管资源存在,但 FindResource() 函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35062840/