LoadLibrary调用失败原因

来源:互联网 发布:大数据开源项目 编辑:程序博客网 时间:2024/04/29 23:59

利用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。

原创粉丝点击