VS2010中char與寬字元的問題

2021-07-10 21:26:43 字數 1867 閱讀 7475

使用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.配置...