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...