C++:从dll访问嵌入式资源

asi*_*sif 5 c++ dll embedded-resource

我有一个c ++ dll项目,其中,我通过"resource.rc"文件嵌入了一些原始数据.

IDR_TEMPLATE1           RCDATA                "areaTemplate.bin"
Run Code Online (Sandbox Code Playgroud)

现在我想从dll访问"areaTemplate.bin"文件的数据.如何在字节数组中读取"areaTemplate.bin"的内容?

man*_*ell 2

首先使用FindResourceFindResourceEx,然后使用LoadResourceLockResource

使用SizeofResource获取数据的大小。

代码:

HMODULE g_hModDll;

[...]

HRSRC hRscr = FindResource( g_hModDll, MAKEINTRESOURCE( IDR_TEMPLATE1 ),
                            MAKEINTRESOURCE( RT_RCDATA ) );
if ( hRscr ) {
    HGLOBAL hgRscr = LoadResource( g_hModDll, hRscr );
    if ( hgRscr ) {
        PVOID pRscr = LockResource( hgRscr );
        DWORD cbRscr = SizeofResource( g_hModDll, hRscr );
    }
}
Run Code Online (Sandbox Code Playgroud)

请务必阅读以下有关 LoadResource 的注释:

备注LoadResource 的返回类型是 HGLOBAL 是为了向后兼容,而不是因为该函数返回全局内存块的句柄。不要将此句柄传递给 GlobalLock 或 GlobalFree 函数。

没有“解锁资源”或“免费资源”API。

备注LockResource 返回的指针在包含该资源的模块被卸载之前一直有效。无需解锁资源,因为当创建资源的进程终止时,系统会自动删除它们。