VC6 0下設定Unicode 開發環境

2021-05-25 00:09:50 字數 4580 閱讀 6698

vc++6.0支援unicode程式設計,但預設的是ansi,所以開發人員只需要稍微改變一下編寫**的習慣便可以輕鬆編寫支援unicode的應用程式。

使用vc++6.0進行unicode程式設計主要做以下幾項工作:

1、為工程新增unicode和_unicode預處理選項。

具體步驟:開啟[工程]->[設定…]對話方塊,在c/c++標籤對話方塊的「預處理程式定義」中去除_mbcs,加上_unicode,unicode。(注意中間用逗號隔開).

在沒有定義unicode和_unicode前,所有函式和型別都預設使用ansi的版本;在定義了unicode和_unicode之後,所有的mfc類和windows api都變成了寬位元組版本了。

2、設定程式入口點

因為mfc應用程式有針對unicode專用的程式入口點,我們要設定entry point。否則就會出現連線錯誤。

設定entry point的方法是:開啟[工程]->[設定…]對話方塊,在link頁的output類別的entry point裡填上wwinmaincrtstartup。

3、使用ansi/unicode通用資料型別

微軟提供了一些ansi和unicode相容的通用資料型別,我們最常用的資料型別有_t ,tchar,lptstr,lpctstr。

順便說一下,lpctstr和const tchar*是完全等同的。其中l表示long指標,這是為了相容windows 3.1等16位作業系統遺留下來的,在win32 中以及其它的32位作業系統中,long指標和near指標及far修飾符都是為了相容的作用,沒有實際意義。p(pointer)表示這是乙個指標;c (const)表示是乙個常量;t(_t巨集)表示相容ansi和unicode,str(string)表示這個變數是乙個字串。綜上可以看出, lpctstr表示乙個指向常固定位址的可以根據一些巨集定義改變語義的字串。比如:

使用函式中的引數最好也要有變化,比如:

messagebox(_t(「你好」));

其實,在上面的語句中,即使您不加_t巨集,messagebox函式也會自動把「你好」字串進行強制轉換。但我還是推薦您使用_t巨集,以表示您有unicode編碼意識。

4、修改字串運算問題

一些字串操作函式需要獲取字串的字元數(sizeof(szbuffer)/sizeof(tchar)),而另一些函式可能需要獲取字串的位元組數sizeof(szbuffer)。您應該注意該問題並仔細分析字串操作函式,以確定能夠得到正確的結果。

ansi操作函式以str開頭,如strcpy(),strcat(),strlen();

unicode操作函式以wcs開頭,如wcscpy,wcscpy(),wcslen();

ansi/unicode操作函式以_tcs開頭 _tcscpy(c執行期庫);

ansi/unicode操作函式以lstr開頭 lstrcpy(windows函式);

考慮ansi和unicode的相容,我們需要使用以_tcs開頭或lstr開頭的通用字串操作函式。

六、舉個unicode程式設計的例子

第一步:

開啟vc++6.0,新建基於對話方塊的工程unicode,主對話方塊idd_unicode_dialog中加入乙個按鈕控制項,雙擊該控制項並新增該控制項的響應函式:

void cunicodedlg::onbuttonunicode()

新增靜態文字框idc_disp,使用classwizard給該控制項新增cstring型別變數m_disp。使用預設ansi編碼環境編譯該工程,生成unicode.exe。

第二步:修改系統內碼

開啟「控制面板」,單擊「日期、時間、語言和區域設定」選項,在「日期、時間、語言和區域設定」視窗中繼續單擊「區域和語言選項」選項,彈出「區域和語言選項」對話方塊。在該對話方塊中,單擊「高階」標籤,將「非unicode的程式的語言」選項改為「日語」,單擊「應用」按鈕,

彈出的對話方塊單擊「是」,重新啟動計算機使設定生效。

執行unicode.exe程式並單擊「button1」按鈕,看,靜態文字框出現了亂碼。

第三步:

改為unicode編碼環境編譯該工程,生成unicode.exe。再次執行unicode.exe程式並單擊「unicode」按鈕。看到unicode編碼的優勢了吧。

操作:到底什麼是

ansi

,什麼是

unicode

呢?其實這是兩種不同的編碼方式標準,

ansi

中的字元採用

8bit

,而unicode

中的字元採用

16bit

。8bit

的ansi

編碼只能表示

256種字元,表示

26個英文本母是綽綽有餘的,但是表示漢字,南韓語,日語等有著成千上萬個字元的非西方字元肯定就不夠了,正是如此才引入了

unicode

標準。在軟體開發中,特別是使用

c語言的一些有關字串處理的函式,

ansi

和unicode

是區分是用的,那麼

ansi

型別的字元和

unicode

型別的字元如何定義,如何使用呢?

ansi

和unicode

又如何轉換呢?

一.定義部分:

ansi

charstr[1024];  

可用字串處理函式:

strcpy( ),  strcat( ), strlen( )

等等。unicode

wchar_tstr[1024]

;可用字串處理函式

二.可用函式:

ansi

:即char可用字串處理函式:strcat( ),strcpy( ), strlen( )等以str打頭的函式。

unicode

:即wchar_t可用字串處理函式:wcscat(),wcscpy(),wcslen()等以wcs打頭的函式。

三.系統支援

windows 98

:只支援

ansi

。windows 2k

:既支援

ansi

又支援unicode

。windows ce

:只支援

unicode。說明

1.在com裡面只支援

unicode。2.

windows 2000

整個os

系統都是基於

unicode

的,為此在

windows 2000

下使用ansi

是需要付出代價的,雖然在編碼上不用任何的轉換,但是這種轉化是隱藏的,是占用系統資源的(

cpu,記憶體)。3.在

windows 98

下必須使用

unicode

,則需要自己手動的編碼切換。

三.如何區分:

在我們軟體開發中往往需要即支援

ansi

又支援unicode

,不可能在要求型別轉換的時候,重新改變字串的型別,和使用於字串上的操作函式。為此

,標準的

c執行期庫和

windows

提供了巨集定義的方式。在c

語言裡面提供了

_unicode

巨集(有下劃線),在

windows

裡面提供了

unicode

巨集(無下劃線),只要定了

_unicode

巨集和unicode

巨集,系統就會自動切換到

unicode

版本,否則,系統按照

ansi

的方式進行編譯和執行。

只定義了巨集並不能實現自動的轉換,他還需要一系列的字元定義支援。

1.tchar

如果定義了

unicode

巨集則tchar

被定義為

wchar_t

。typedef wchar_t     tchar; 否則

tchar

被定義為

char

typedef char            tchar; 2.

lptstr

如果定義了

unicode

巨集則lptstr

被定義為

lpwstr

。typedef lptstr     lpwstr; 否則

tchar

被定義為

char

typedef lptstr     lpstr;

說明:在使用字串常量的時候需要使用

_text(「mystr」)

來支援系統的自動轉換。

在VC6 0下設定Unicode編譯環境

vc 6.0支援unicode程式設計,但預設的是ansi,所以開發人員只需要稍微改變一下編寫 的習慣便可以輕鬆編寫支援unicode的應用程式。使用vc 6.0進行unicode程式設計主要做以下幾項工作 1 為工程新增unicode和 unicode預處理選項。具體步驟 開啟 工程 設定 對話方...

在VC6 0下設定Unicode編譯環境

vc 6.0支援unicode程式設計,但預設的是ansi,所以開發人員只需要稍微改變一下編寫 的習慣便可以輕鬆編寫支援unicode的應用程式。使用vc 6.0進行unicode程式設計主要做以下幾項工作 1 為工程新增unicode和 unicode預處理選項。具體步驟 開啟 工程 設定 對話方...

在VC6 0下設定Unicode編譯環境

vc 6.0支援unicode程式設計,但預設的是ansi,所以開發人員只需要稍微改變一下編寫 的習慣便可以輕鬆編寫支援unicode的應用程式。使用vc 6.0進行unicode程式設計主要做以下幾項工作 1 為工程新增unicode和 unicode預處理選項。具體步驟 開啟 工程 設定 對話方...