LoadLibrary调用失败原因

LoadLibrary调用失败原因利用loadlibrary显示装载动态库:HINSTANCEhDll;//DLL句柄hDll=LoadLibrary(“user32.dll”);if(hDll!=NULL){}结果总是直接跳出if,dll加载失败排除了其它问题后,通过以下语句调用成功hDll=LoadLibrary(TEXT(“user32.dll”));经过一番百度google后发现,原来是字符格式惹的祸。这里的LoadLibrary实际使用了LoadLibraryW而非LoadLibraryA,因此需要UNICODE字

大家好,欢迎来到IT知识分享网。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释疑

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/21096.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信