error C2664: “LoadLibraryW”: 不能将参数 1 从“const char *”转换为“LPCWSTR”

时间:2021-12-08 20:14:48

在使用VS2010编写运行时动态链接dll文件时出现的一个问题,问题解决得益于此文章:

http://blog.sina.com.cn/s/blog_6a2236590100xbgl.html

通过调用这个函数:
LoadLibrary出现的该问题。
原因 :工程只支持UNICODE字符
解决方法:
1、在解决方案资源管理器中的工程上右键属性->配置属性-->常规--->字符集---->使用多字节符字符集

2、也就是宽字符,所以下面这行代码,应该编译有错误
hinst=LoadLibrary("InTheHand.Net.Personal.dll");
也就是:
cannot convert parameter 1 from 'char [27]' to 'const unsigned short *'
改为:
hinst=LoadLibrary(L"InTheHand.Net.Personal.dll");
或者
hinst=LoadLibrary(_T("InTheHand.Net.Personal.dll"));

================================================================

关于LPCWSTR的类型:

LPCWSTR
L 后面的P是一个长的指针(以前16位windows时有短的,现在都是长的)
P 这是一个指针
C 指向的是const型
W 指向的是宽字符(unicode)
STR 这是一个字符串
windows编程中一般还是用LPCTSTR比较多,这是一个宏,编译器跟据_UNICODE参数,决定将他变成LPCSTR(ansi版)或者LPCWSTR(unicode版)

如果遇到参数错误(cannot convert parameter * from 'const char [**]' to 'LPCWSTR'),可以考虑察看声明,如果有ASNI方式的只要在函数后面加个A就可以了,或者在定义参数时把char*改为WCHAR*。
如果是混合使用的,那可以考虑转化,方法很多,比如使用TEXT()对字符串常量进行转化。
在VS2005以后的版本中默认是使用Unicode的,所以会出现很多以前版本没有的编译错误(实参与形参类型不匹配)。