在使用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的,所以會出現很多以前版本沒有的編譯錯誤(實參與形參類型不匹配)。