使用vs2010 提示錯誤 : error c2664: 'loadimagew' : cannot convert parameter 2 from 'char [20]' to 'lpcwstr'「char [20]」轉換為「lpcwstr」
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
定義,用
傳統的方式
來處理。
如何轉換呢 ?
錯誤方法一:
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等函式是不知道的。
方法一:使用widechartomultibyte和 multibytetowidechar函式
**如下:
#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();
vs2010中處理char和CString
編寫個網路聊天的程式,sendto和recvfrom函式中使用char,使用sprintf格式化呢又提示警告,要用format函式,使用cstring物件呢經過lparam引數傳遞後又不好轉換,接收端接收到的全是亂碼,不知道該如何處理了,如下 這是接收端的 dword winapi csx15 ch...
Matlab2010與VS2010初吻(一)
最近因程式中需要數值計算和做圖表,研究了matlab與vs混合程式設計。結合網上的各種版本及個人摸索,找到一種可行且又簡單易學的方法,現拿與大家分享 一 在matlab中用m檔案生成c c 的dll 開啟matlab 在command視窗輸入mex setup選擇編譯器 在command視窗輸入mb...
VS2010與Matlab2010b混合程式設計
套用今天的簽名 最新的vs 最新的matlab 最新的windows 無盡的煩惱 用了一天的時間去配置相關的環境,確實很囧。好在現在問題解決了,特發布過程如下,希望能給有需要的朋友帶來幫助。注 因為程式也是剛調通,所以有些原因還沒有仔細分析,如果不對,敬請指教。1.表示matlab按照目錄 2.配置...