c++ - 尽管资源存在,但 FindResource() 函数失败

标签 c++ runtime-error embedded-resource

我正在尝试使用 Win32 FindResource() 函数将嵌入式资源加载到缓冲区中。 我在 Visual Studio 2015 IDE 中添加资源编译时间:

enter image description here

正如您使用 CFFexplorer 或 ResHacker 等 PE 编辑器所见,资源已正确添加: enter image description here

当我在 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/

相关文章:

C++:如何将十六进制 HANDLE 转换为十进制?

c++ - 写入类指针给我一个访问冲突错误

actionscript-3 - 如果使用 Flash Builder 4.7 而不是 4.6,则基类中的静态函数不想调用子类上的成员函数

vb6 - Visual Basic 6 : Run-time error 424 (If Function)

java - 如何在 Java 独立应用程序中读取资源文件

c++ - 方法超出范围后是否应该删除引用的 std::shared_ptr ?

c++ - 如何获取在对 VirtualAlloc 的初始分配调用中保留的区域大小

java - 为什么此 Activity 会意外关闭我的 Android?

gcc - Linux相当于Windows的 “resource files”吗?

java - 在java中嵌入wav?