青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

專注于c++的學習

還是專注于c++的學習

統計

留言簿(1)

閱讀排行榜

評論排行榜

《windows核心編程》讀書筆記2-chapter2

如果調用任何windows函數,并傳遞給他一個ANSI字符串,系統會先將這個字符串轉換為unicode字符串,然后將這個unicode字符串傳遞給操作系統。這樣你就理解,為什么在windows平臺上,使用unicode的效率要相對更高一些。

所以,我們可以通過在一開始就是用unicode開發應用程序,使程序執行更有效率。

 

1.1     Windows ceunicode

為了保持windows ce的精致,ms決定不支持ansiwindows函數。所以,如果要進行windows ce上的程序開發,必須了解并在整個應用程序中使用unicde

 

1.2     關于COM

Ms在將COM組建從16位移植到32位系統使,作出了一個決定:素有需要字符串的COM接口方法只支持unicode字符串。

 

1.3     如何編寫unicode源代碼

1.3.1  C運行庫的unicode支持

標準cstring.h頭文件中個定義了一個wchar_tunicode字符數據類型。

typdef unsigned long wchar_t;

標準c還專門為wchar_t定義了一組函數。

char* strcat(char*, const char*);

wchar_t* wcscat(wchat_t* , const wchar_t*);

 

size_t strlen(const char*);

size_t wcslen(const wchar_t*);

所有的unicode字符串都以wcs開頭,代表寬字符。為了調用unicode,簡單的將ansi字符串的str替換為wcs即可。

 

TChar.h頭文件主要為為了幫助ANSI/Unicode通用源代碼文件的編寫,他主要由一系列的宏組成,在編寫源代碼時,可以使用這些宏來替代對strwcs函數直接的調用。

 

Msc++編譯器將所有的字符串默認都認為是ansi字符串,而不是unicode字符串。所以,對于下面的這句話:

TCHAR *szError = “Error”;

如果沒有定義_UNICODE宏,則能夠編譯通過,但是如果定義了該宏,則會出現編譯錯誤。

為了生成一個UNICODE字符串而非一個ansi字符串,需要將以上的一句改為:

TCHAR *szError = L”Error”;

 

那么為了同時兼容上面的兩種情況,我們定義一個宏

#ifdef _UNICODE

#define _TEXT(x) L ## x

#else

#define _TEXT(x) x

#endif

 

這樣我們就可以重寫以上的語句:

TCHAR* szError = _TEXT(“Error);

 

1.3.2  Windows定義的unicode數據類型

WCHAR  Unicode字符

PWSTR   指向Unicode字符串的 指針

PCWSTR  指向Unicode字符串常量的指針

 

Windows.h中同樣定義了ansi/Unicode通用的數據類型

PTSTR

PCTSTR

在編譯這個模塊時,是否定義了UNICODE宏決定了這些數據類型指向ansi還是unicode

 

 

注意, _UNICODE是標準cunicode開關;

UNICODEwindowsunicode開關。

 

所以,一般來說,這兩個宏要么同時定義,要么同時不定義。

 

 

1.3.3  Windows系統中的unicode函數和ansi函數

windows2000下,CreateWindowsExA只是一個簡單的轉換層,他實現內存分配并把ansi字符串轉換為unicode字符串,然后調用CreateWindowsExW函數,把轉換后unicode字符串傳遞給該函數。當CreateWindowsExW返回時,CreateWindowsExA釋放內存緩沖區,并且返回其窗口句柄。

 

 

1.4     讓應用程序符合ansiunicode規范

下面是一些基本規則:

l  對于文本字符和串使用通用數據類型;

l  對字節、字節指針和數據緩沖區使用顯式數據類型;

l  對文字字符和字符串使用TEXT宏;

l  修改字符串運行問題, 使用sizeof(szbuffer)/sizeof(TCHAR)而不是sizeof(szbuffer);

l  分配內存時,使用malloc(len*sizeof(TCHAR)) 而不是malloc(len);

 

1.4.1  Windows字符串函數

第一個CompareString參數指定一個32位的位置IDLCID),用來識別具體的語言種類,CompareString使用LCID,通過檢查適用于特定語言的字符的意義來比較字符串。

 

sprintf()系列函數的應用

 

char szA[100];

wchar_t szW[100];

 

//normal

sprintf(szA, “%s”, “ANSI Str”);

 

//convert Unicode to ansi

sprintf(szA, “%S”, L”ANSI Str”);

 

//normal

swprintf(szW, L“%s, L”ANSI Str”);

 

//convert Ansi To unicode

swprintf(szW, L”%S”, “ANSI Str”);

這里要注意格式化字符串的中s字符的大小寫;

 

1.4.2  資源

Vc程序的內部資源字符串其實也是unicode的,在使用LoadString來加載資源時,如果是ansi,則其實是現將內部的unicode轉換為ansi,然后在返回。

 

1.4.3  確定文本是ansi還是unicode

DWORD IsTextUnicode(CONST PVOID pvBuffer, int cb, PINT pResult);

用于判斷指定的文本為ansi還是unicode

這個函數使用的是統計的方法論來分析緩沖區內的文本是ansi還是unicode,所以他也有可能返回一個錯誤的結果。

1.4.4  unicodeansi之間轉換

這里其實就是涉及到兩個函數

WideCharToMultiByte()

MultiByteToWideChar()

通過查看函數的原型,我們可以發現WideCharToMulteByteMultiByteToWideChar多了兩個參數,pDefaultChar, pfUsedDefaultChar,如果寬字符不能轉換某字符,則函數應該使用參數pDefaultChar指向的字符,如果該參數為NULL,函數使用系統默認的字符。默認的字符為問號(這就是為什么在英文系統下,中文字符總是顯示為問號的原因),問號用于文件名是危險的,因為問好是一種通配符。

posted on 2009-10-24 14:20 拿磚拍 閱讀(318) 評論(2)  編輯 收藏 引用 所屬分類: 讀書筆記

評論

# re: 《windows核心編程》讀書筆記2-chapter2 2009-10-27 00:35 新開天龍八部私服

注意格式化字符串的中s字符的大小寫,這一點一定要記清楚。  回復  更多評論   

# re: 《windows核心編程》讀書筆記2-chapter2 2009-10-27 00:36 天龍八部私服

寫得不錯也,學習了。  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美精品久久天天躁| 久久综合狠狠综合久久综青草| 久久久亚洲精品一区二区三区 | 欧美亚一区二区| 韩国精品一区二区三区| 亚洲综合色丁香婷婷六月图片| 欧美激情第六页| 久久久国产午夜精品| 国产婷婷色一区二区三区四区| 亚洲综合日本| 亚洲伦理在线| 欧美精品成人91久久久久久久| 亚洲激情另类| 亚洲大胆av| 久久成人av少妇免费| 国产在线日韩| 玖玖玖免费嫩草在线影院一区| 久久精品国产免费| 禁断一区二区三区在线| 美女视频黄a大片欧美| 久久亚洲欧洲| 91久久精品日日躁夜夜躁欧美| 欧美刺激性大交免费视频| 久久综合久久久久88| 亚洲精品欧美日韩| 9l国产精品久久久久麻豆| 国产精品免费网站| 久久天堂成人| 欧美成人精品一区二区| 中文在线不卡| 亚洲欧美日韩中文播放| 极品少妇一区二区三区| 欧美激情女人20p| 欧美色视频日本高清在线观看| 欧美一区二区三区视频免费播放 | 欧美视频专区一二在线观看| 亚洲女优在线| 中文亚洲欧美| 久久久999| 亚洲靠逼com| 国产在线精品自拍| 亚洲视频欧洲视频| 亚洲精品久久久久久久久久久| 亚洲私拍自拍| 一本色道久久88综合日韩精品| 亚洲精品四区| 免费欧美高清视频| 欧美乱妇高清无乱码| 国产精品成人观看视频国产奇米| 欧美一区成人| 蜜桃av噜噜一区二区三区| 亚洲天堂男人| 久久综合九色综合网站| 先锋影音久久久| 麻豆精品视频在线观看视频| 中文精品99久久国产香蕉| 午夜影院日韩| 一区二区三区av| 欧美资源在线观看| 亚洲一区二区三区成人在线视频精品| 欧美一区二区三区视频在线观看| 亚洲精品久久久久久一区二区| 亚洲一区二区三区影院| 亚洲精品一级| 久久久久成人精品免费播放动漫| 亚洲一级高清| 久久夜色精品一区| 欧美专区日韩视频| 国产精品ⅴa在线观看h| 亚洲成色777777女色窝| 国产欧美一区二区三区在线老狼 | 久久久99爱| 亚洲伊人一本大道中文字幕| 麻豆精品网站| 美女久久网站| 国产午夜亚洲精品不卡| 亚洲视频www| 一本色道久久加勒比88综合| 噜噜噜在线观看免费视频日韩| 欧美在线网站| 欧美精品色综合| 免费久久99精品国产自在现线 | 毛片一区二区| 亚洲小少妇裸体bbw| 樱桃视频在线观看一区| 欧美视频日韩视频在线观看| 蜜桃av一区| 欧美一区二区三区视频免费播放| 99视频有精品| 一本久久综合亚洲鲁鲁| 亚洲承认在线| 国产精品久久久久久福利一牛影视| 欧美激情一区二区| 亚洲第一久久影院| 美国十次成人| 久久se精品一区二区| 久久国产精品亚洲va麻豆| 国产精品嫩草影院av蜜臀| 夜夜嗨av一区二区三区网页 | 免费观看久久久4p| 曰韩精品一区二区| 久久精品最新地址| 蜜臀av性久久久久蜜臀aⅴ| 国产在线精品自拍| 久久免费精品日本久久中文字幕| 老司机精品福利视频| 1000部国产精品成人观看| 亚洲精品日韩在线| 亚洲综合欧美| 国产一二精品视频| 久久婷婷久久| 亚洲精品一区二区三区不| 在线一区亚洲| 国产精品资源在线观看| 久久精品99久久香蕉国产色戒| 欧美成va人片在线观看| 亚洲看片免费| 国产精品日韩久久久| 欧美亚洲一区二区三区| 欧美电影打屁股sp| 亚洲午夜久久久久久尤物| 国产噜噜噜噜噜久久久久久久久| 久久riav二区三区| 亚洲人体一区| 欧美一区二区三区在线| 亚洲成在人线av| 欧美视频福利| 久久精品日韩欧美| 日韩视频免费观看高清在线视频 | 欧美综合二区| 欧美在线不卡视频| 国产精品激情| 亚洲日本理论电影| 久久av在线看| 一本色道综合亚洲| 欧美日韩dvd在线观看| 日韩一级欧洲| 亚洲午夜精品17c| 国产亚洲一区在线播放| 麻豆精品视频在线| 亚洲午夜在线| 亚洲国产高清一区| 亚洲欧美日韩综合aⅴ视频| 在线精品一区二区| 国产精品视频网| 欧美电影免费观看| 午夜久久久久| 亚洲美女在线国产| 欧美激情小视频| 欧美一级在线播放| 亚洲毛片在线观看| 禁久久精品乱码| 国产伦精品一区二区三区高清版 | 欧美国产日韩一区二区| 亚洲欧美精品中文字幕在线| 亚洲国产精品美女| 久久精品视频免费播放| 中文亚洲免费| 一区二区精品国产| 亚洲人成在线观看网站高清| 有码中文亚洲精品| 国产手机视频一区二区| 欧美高清在线视频| 久久久蜜桃一区二区人| 午夜精品福利在线| 亚洲一区精品电影| 一本久久综合| 一区二区欧美在线观看| 亚洲免费av网站| 亚洲国产专区校园欧美| 亚洲欧美日韩国产中文在线| 亚洲美女一区| 日韩性生活视频| 日韩午夜免费视频| 99re这里只有精品6| 亚洲精品一区二区三区四区高清 | 亚洲欧美激情视频在线观看一区二区三区| 国产亚洲成精品久久| 欧美大尺度在线观看| 国产精品人人爽人人做我的可爱| 久久亚洲欧美国产精品乐播| 欧美精品免费在线| 欧美不卡一区| 亚洲国产精品ⅴa在线观看| 亚洲新中文字幕| 中国成人亚色综合网站| 国产精品久久久一区二区| 亚洲精品一区二区三区蜜桃久 | 亚洲性感美女99在线| 9i看片成人免费高清| 日韩视频精品| 亚洲视频在线免费观看| 中文亚洲视频在线| 亚洲精品人人| 中日韩美女免费视频网站在线观看| 在线视频免费在线观看一区二区| 亚洲视频网站在线观看| 欧美在线观看网站| 久久一区免费| 亚洲成人自拍视频|