在寫win32應用程式時候,你可能遭遇到如下錯誤 : error c2664: 『loadimagew』 : cannot convert parameter 2 from 『char [20]』 to 『lpcwstr』「char [20]」轉換為「lpcwstr」
一、問題的原因:vs2010預設採用寬字元unicode編碼方式,定義了unicode,因此相關的字串必須為unicode字串,而非ascii字串。
lpcwstr中的w是寬字元的意思,是unicode,就是說不是傳統的char這種單位元組字元,而是乙個字元佔兩位元組.
編譯器把loadimage解釋成了loadimagew,說明**中某個地方定義了unicode開關,編譯環境成了寬位元組的,要把這個定義去掉.
win32 api也分2中版本, messageboxa / messageboxw,,,messagebox根據是否定義_unicode巨集而定義到其中乙個版本。
二、正確的解決方案是
選擇【專案選單】->【最後的屬性】->【配置屬性】->【常規】->【專案預設值】->unicode改為未設定。
三、幾個注意事項(此處引用了乙個台灣開**壇的幾句話):
1,若定義unicode,相關的字串都必須使用unicode的字串,而非ansi字串。也就是:wchar_t * wfilename;
2指定的unicode字串常數,**l「…」;例如:wchar_t *wfilename= l「helloworld」;
3.ansi字串(就是傳統的char*)與wchar_t的*unicode的的字串互轉,請用multibytetowidechar與widechartomultibyte這兩個api函式。
4,如果不太懂unicode的,那麼就不要加unicode定義,用傳統的方式來處理。
四、那麼如何將char*或者char陣列轉換成vs2010中的lpcwstr呢?
(1)先看擊中錯誤的方法:
char buffer[80];
錯誤方法一:
wsprintf(buffer,l」wm_char: character = %c 「,ascii_code);
textout(hdc, 0,0,(lpcwstr)buffer, strlen(buffer));
這個只能顯示第乙個字母「w」
錯誤方法二:
sprintf((lpcwstr)buffer,l」key state = 0x%x 「,key_state);
textout(hdc, 0,16,(lpcwstr)buffer, strlen(buffer));
這個出現的是亂碼!
錯誤方法三:
sprintf(buffer,l」key state = 0x%x 「,key_state);
textout(hdc, 0,16,buffer, strlen(buffer));
這個提示不能將char[80]轉換成lpcwstr
強制型別轉換是不行的,因為乙個是字元佔乙個位元組,乙個事佔兩個位元組,但是sprintf等函式是不知道的。
(2)正確轉換方法:
方法一:使用multibytetowidechar和 multibytetowidechar函式,大家可以參考csdn論壇的這篇帖子
**如下:
#include #include #define strsafe_no_deprecate
#include // for string... functions
#include // for _asserte
cstringw convertw(cstring str, int sourcecodepage)
呼叫:
cstringw wsztemp = convertw( filename, cp_acp);
lpwstr pwstr = wsztemp.getbuffer();
或將char改為tchar
MFC中CString轉換成char陣列的問題
由於結構體中用到聯合體 聯合體需要確定分配記憶體分配大小 或其它因素,需要用char陣列來儲存字串,但是在mfc中一般都是用cstring來存放字條串。關於它們之間的轉換,在vs2008中有時會出現異常情況。在msdn是這樣寫的 cstring orig hello,world convert to...
MFC中CString轉換成char陣列的問題
由於結構體中用到聯合體 聯合體需要確定分配記憶體分配大小 或其它因素,需要用char陣列來儲存字串,但是在mfc中一般都是用cstring來存放字條串。關於它們之間的轉換,在vs2008中有時會出現異常情況。在msdn是這樣寫的 cstring orig hello,world convert to...
將string轉換成char
string 是c 標準庫裡面其中乙個,封裝了對字串的操作 把string轉換為char 有3中方法 1.data 如 如 string str abc char p str.data 2 c str 如 如 string str gdfd char p str.c str 3.copy 比如比如 ...