DLL中使用FindResource时需要注意的事项

有时候我们需要把一些图片、语言包等各种各样的资源文件打包到DLL中,程序初次运行的时候,我们可以将那些文件释放出来,这样非常方便。当然也可以打包到exe文件中,原理都是一样的,利用FindResource相关函数即可。但是需要注意的是,

DLL中使用该系列函数和exe中执行该函数是有区别的:

 HMODULE ghmodule = GetModuleHandle(L"test.dll");  
if(NULL == ghmodule)
    return false;
HRSRC hr = ::FindResource(ghmodule,L"IDR_DATA",L"MYRESTYPE");  
if (NULL == hr)  
{  
    int ierr = GetLastError();  
    return false;  
}  
ULONG nResSize = ::SizeofResource(ghmodule,hr);  
HGLOBAL hG= ::LoadResource(ghmodule, hr);  
if (NULL == hG || nResSize <= 0)  
{  
    return false;  
}  
LPBYTE pData = (LPBYTE)LockResource(hG); 

在exe中,FindResource相关函数的第一个参数可以为NULL,表示当前模块,但是DLL中执行该函数时,参数使用NULL的话则代表在调用该DLL的程序的资源文件中搜索。所以该函数始终会返回空,搜索不到资源!

通过GetModuleHandle可以获取到该DLL在当前进程空间中的位置,参数为DLL的字符串名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇龍_

若帮助到你,希望能给予鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值