SDK程式設計筆記 UNICODE篇

2021-08-21 22:45:52 字數 2416 閱讀 1530

sdk程式設計筆記-unicode篇

[簡單基礎但重要]

petzold的programming windows的第2章非常詳細的講解了關於unicode的方方面面。我們需要知道的是它給c語言和windows程式設計帶來的變化。

·c語言相關

(測試環境:vc++6.0)

char型別

wchar_t型別

型別大小(32位系統)

8位16位

常量字元表示法

'a'l'a' 或 'a'

常量字串表示法

'hello'

l'hello'

一些使用方法

char c='a'; (c的值:0x41)

wchar_t wc='a'; (wc的值:0x0041)

char* p='hello';

wchar_t* pw=l"hello";

sizeof

sizeof("hello")=6

sizeof(l"hello")=12

計算長度

strlen("hello")=5

wcslen(l"hello)=5

既然有兩個版本的函式,如果我們想在程式中同時支援它們該怎麼辦?如果使用vc++,你只要在程式中包含tchar.h標頭檔案,這個檔案中提供了一些巨集以相容兩種字符集。例如:

#ifdef _unicode

typedef wchar_t _tchar;

typedef wchar_t tchar;

#define __t(x) l ## x

#define _tprintf wprintf

#define _tcslen wcslen

......

#else

typedef char _tchar;

typedef char tchar;

#define __t(x) x

#define _tprintf printf

#define _tcslen strlen

......

#endif

#define _t(x) __t(x)

#define _text(x) __t(x)

我們只要使用tchar,_tpirntf,_tcslen,_text等,就可以兼顧兩種字符集。

·windows相關

windows2000/nt完全支援unicode,windows98對unicode支援很少。我們關心的是怎樣編寫程式,既可以編譯為不支援unicode,又可編譯為支援unicode。windows sdk的標頭檔案中定義了一些巨集以完成這個任務。

typedef char char ;

typedef wchar_t wchar ; // wc

typedef char * pchar, * lpch, * pch, * npstr, * lpstr, * pstr ;

typedef const char * lpcch, * pcch, * lpcstr, * pcstr ;

typedef wchar * pwchar, * lpwch, * pwch, * nwpstr, * lpwstr, * pwstr ;

typedef const wchar * lpcwch, * pcwch, * lpcwstr, * pcwstr ;

和標準c一樣,windows c也使用tchar作為相容的型別

#ifdef unicode

typedef wchar tchar, * ptchar ;

typedef lpwstr lptch, ptch, ptstr, lptstr ;

typedef lpcwstr lpctstr ;

#define __text(quote) l##quote

#else

typedef char tchar, * ptchar ;

typedef lpstr lptch, ptch, ptstr, lptstr ;

typedef lpcstr lpctstr ;

#define __text(quote) quote

#endif

另外還有乙個text巨集,等價於__text巨集:#define text(quote) __text(quote)。

寫win32 sdk程式的時候常常在註冊視窗類時使用如下**:

這樣,當在windows98下執行使用了unicode的程式時,程式可以給出提示並退出。這段**為什麼在win98下可以執行?因為messagebox在存在unicode的定義下,被替換為messageboxw,而messageboxw是win98支援的少數寬字元windows函式之一。

總之,寫windows sdk程式時盡可能使用像tchar,ptstr,lpctstr,text這樣的巨集。

the end

SDK程式設計筆記 UNICODE篇

sdk 程式設計筆記 unicode篇 簡單基礎但重要 petzold的programming windows的第2章非常詳細的講解了關於unicode的方方面面。我們需要知道的是它給c語言和windows程式設計帶來的變化。c語言相關 既然有兩個版本的函式,如果我們想在程式中同時支援它們該怎麼辦?...

Unicode程式設計

網上找了一篇關於unicode程式設計設定方面的文件,感覺不錯,收藏了 1。unicod程式設計 新增uafxcw.lib檔案 乙個是debug版本的庫,乙個是release版本的庫uafxcw.lib 1 在project settings的link中加入uafxcw.lib 2 pragma c...

Unicode程式設計

1.windows 定義的unicode 資料型別有哪些?資料型別 說明 wchar unicode字元 源自系統巨集定義typedef wchar t wchar pwstr 指向unicode字串的指標 pcwstr 指向乙個恆定的unicode字串的指標 對應的ansi資料型別為char,lp...