LoadLibrary调用失败原因

利用loadlibrary显示装载动态库:

 

HINSTANCE hDll; //DLL句柄

hDll = LoadLibrary("user32.dll");

if(hDll != NULL)

{

}

 

结果总是直接跳出if,dll加载失败

 

排除了其它问题后,通过以下语句调用成功

hDll = LoadLibrary(TEXT("user32.dll"));

 

经过一番百度google后发现,原来是字符格式惹的祸。

 

这里的LoadLibrary实际使用了LoadLibraryW而非LoadLibraryA,因此需要UNICODE字符串(宽字符串),而非窄字符串,如下:

 

#ifdef UNICODE

#define LoadLibrary  LoadLibraryW

#else

#define LoadLibrary  LoadLibraryA

#endif // !UNICODE

 

 

C/C++代码中,直接使用""定义的字符串为窄字节串,而windows头文件中提供的TEXT宏可以根据是否定义了UNICODE宏来自动选择字符串类型。

 

因此,利用TEXT宏使其自动选择了正确的字符集,dll调用成功。

 

PS:LoadLibrary函数跟LoadLibraryEx函数装载dll的机制不一样,前者在装载dll遇到与该dll依赖的其他dll时会自动装载,而后者不会,网上有加载自己的dll无法成功的例子,排除路径问题的话(最好全路径),就要考虑该dll是否依赖到其它的dll。

 

参考文章:loadlibrary释疑

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值