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

C++ Programmer's Cookbook

{C++ 基礎(chǔ)} {C++ 高級(jí)} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}

《Windwos via C++》之精華

  來(lái)自:夢(mèng)在天涯C++博客(http://www.shnenglu.com/mzty/)

引言

作為一名windows系統(tǒng)上圖形軟件開(kāi)發(fā)者已經(jīng)有3個(gè)多年頭了,在此過(guò)程中有不少的經(jīng)歷和經(jīng)驗(yàn),非常高興與大家分享,今天主要是《windows via C++》一書(shū)的閱讀心得,所以主要談到的是windowsC++的開(kāi)發(fā)。

 

C++語(yǔ)言

我們知道C++是一門(mén)ISO的面向?qū)ο蟮恼Z(yǔ)言,下面我介紹他的三個(gè)方面,也正是這三個(gè)主要方面決定了他被廣泛的使用。第一,C++是一個(gè)功能強(qiáng)大的語(yǔ)言。比如C++語(yǔ)言本身提供的基于C語(yǔ)言的內(nèi)嵌類(lèi)型,數(shù)組,結(jié)構(gòu)體和指針等,C++C新加入的面向?qū)ο蟮?/span>Class,繼承,多態(tài)和模板等,還有C++標(biāo)準(zhǔn)模板庫(kù)(STL)提供的實(shí)際開(kāi)發(fā)當(dāng)中常用的數(shù)據(jù)結(jié)構(gòu)和算法的實(shí)現(xiàn);第二,大量的開(kāi)源和第三方庫(kù),如果在windows上使用C++開(kāi)發(fā),我們還可以借助microsoft對(duì)C++提供的強(qiáng)有力的支持,首先的VS編譯器,還有UI庫(kù)MFC,還有ATL等;除此之外我們還可以看到其他的許多非microsoft的開(kāi)源的和第三方的支持,比如說(shuō)Boost很大程度的擴(kuò)充了STL,提供了更多更高級(jí)的功能,還有LokiC++與設(shè)計(jì)模式結(jié)合起來(lái),還有很多的第三方的UI庫(kù),比如QTWxWindowsWTLGTK等,第三方的網(wǎng)絡(luò)通信庫(kù),比如ACEStreamModule等,第三那的XML庫(kù),比如XercesCMarkuptinyxml等,第三方的科學(xué)計(jì)算庫(kù),比如Blitz++MTL等,第三方的游戲開(kāi)發(fā)庫(kù),比如OGREKlayGE等,第三方的線(xiàn)程庫(kù),比如C++ ThreadsZThreads等,還有其他的很多。第三,C++的高性能。這個(gè)也是毋庸質(zhì)疑的,我們知道的大部分的操作系統(tǒng),嵌入式開(kāi)發(fā),游戲,圖像軟件離不開(kāi)C++,這都是跟C++的高性能有很大的關(guān)系。但從這一點(diǎn)來(lái)看,這就是很多現(xiàn)代的其他的高級(jí)語(yǔ)言沒(méi)有的,所以C++以后仍然有很長(zhǎng)的路要走。

 

Windows via c++》之經(jīng)典

上面說(shuō)了C++語(yǔ)言本身,這里具體到windows系統(tǒng)上C++的開(kāi)發(fā),我們要基于windows系統(tǒng)開(kāi)發(fā)軟件,就難免的要和windows系統(tǒng)打交道,比如系統(tǒng)本身對(duì)字符編碼的支持,系統(tǒng)的異常處理機(jī)制,線(xiàn)程的創(chuàng)建管理,進(jìn)程的創(chuàng)建管理,內(nèi)存和虛擬內(nèi)存的使用,堆棧的操作,DLL的使用等。上面提到的這些都不是C++語(yǔ)言本身的職責(zé),是需要操作系統(tǒng)提供的支持,而所有這些內(nèi)容正是《windows via C++》所覆蓋的內(nèi)容,也正是本書(shū)很好的把C++Windows連接起來(lái),引領(lǐng)C++程序員走向windows的底層,這也正是本書(shū)的經(jīng)典之處!再次感謝作者Jeffrey Richter的偉大貢獻(xiàn)!

 

1)字符編碼:字符編碼作為字符串的基礎(chǔ),自然而然就成了我們軟件開(kāi)發(fā)必不可缺少的基石,那么什么是字符編碼那?字符編碼就是字符在計(jì)算機(jī)內(nèi)部的表示形式,我們都知道在計(jì)算機(jī)內(nèi)部,所有的信息最終都表示為一個(gè)二進(jìn)制的字符串。每一個(gè)二進(jìn)制位(bit)有01兩種狀態(tài),因此八個(gè)二進(jìn)制位就可以組合出256種狀態(tài),這被稱(chēng)為一個(gè)字節(jié)(byte)。上個(gè)世紀(jì)60年代,美國(guó)制定了一套字符編碼,對(duì)英語(yǔ)字符與二進(jìn)制位之間的關(guān)系,做了統(tǒng)一規(guī)定。這被稱(chēng)為ASCII碼,一直沿用至今。ASCII碼一共規(guī)定了128個(gè)字符的編碼,因?yàn)樗徽加昧艘粋€(gè)字節(jié)的后面7位,最前面的1位統(tǒng)一規(guī)定為0。英語(yǔ)用128個(gè)符號(hào)編碼就夠了,但是用來(lái)表示其他語(yǔ)言,128個(gè)符號(hào)是不夠的。所以后來(lái)就各國(guó)有了各國(guó)的編碼,比如日文中的漢字遠(yuǎn)遠(yuǎn)大于256個(gè),所以日文使用如果第一個(gè)字符在0 x 8 1 0 x 9 F 之間,或者在0 x E 0 0 x F C 之間,那么就必須觀察下一個(gè)字節(jié),才能確定字符串中的這個(gè)完整的字符。這樣他就使用一個(gè)或兩個(gè)字節(jié)來(lái)表示一個(gè)字符,這種編碼被稱(chēng)為雙字節(jié)字符集(D B C S )。由于世界上存在著多種編碼方式,這使得同一個(gè)二進(jìn)制數(shù)字可以被解釋成不同的符號(hào)。因此,要想打開(kāi)一個(gè)文本文件,就必須知道它的編碼方式,否則用錯(cuò)誤的編碼方式解讀,就會(huì)出現(xiàn)亂碼。這個(gè)時(shí)候Unicode就出現(xiàn)了他將世界上所有的符號(hào)都納入其中。每一個(gè)符號(hào)都給予一個(gè)獨(dú)一無(wú)二的編碼,那么亂碼問(wèn)題就會(huì)消失。但是unicode也有不同的實(shí)現(xiàn),主要的有三種:UTF-16:其本身就是標(biāo)準(zhǔn)的Unicode編碼方案,又稱(chēng)為UCS-2,它固定使用16 bits(兩個(gè)字節(jié))整數(shù)來(lái)表示一個(gè)字符。UTF-32:又稱(chēng)為UCS-4,它固定使用32 bits(四個(gè)字節(jié))整數(shù)來(lái)表示一個(gè)字符。UTF -8:最廣泛的使用的UTF方案,UTF-8使用可變長(zhǎng)度字節(jié)來(lái)儲(chǔ)存Unicode字符,例如ASCII字母繼續(xù)使用1字節(jié)儲(chǔ)存,重音文字、希臘字母或西里爾字母等使用2字節(jié)來(lái)儲(chǔ)存,而常用的漢字就要使用3字節(jié)。輔助平面字符則使用4字節(jié)。UTF-8更便于在使用Unicode的系統(tǒng)與現(xiàn)存的單字節(jié)的系統(tǒng)進(jìn)行數(shù)據(jù)傳輸和交換。與前兩個(gè)方案不同:UTF-8以字節(jié)為編碼單元,沒(méi)有字節(jié)序的問(wèn)題。但是不管是哪種unicode的實(shí)現(xiàn)都可以包含世界所有的字符,解決軟件本地化的難題。

 

Windows2000以前使用ASCII2000及以后的系統(tǒng)都使用unicode來(lái)編碼,但是需要注意的是Windows2000既支持Unicode,也支持ANSI,因此可以為任意一種開(kāi)發(fā)應(yīng)用程序.如果調(diào)用任何一個(gè)Windows函數(shù)并給它傳遞一個(gè)ANSI字符串,那么系統(tǒng)首先要將字符串轉(zhuǎn)換成Unicode,然后將Unicode字符串傳遞給操作系統(tǒng)。如果希望函數(shù)返回ANSI字符串,系統(tǒng)就會(huì)首先將Unicode字符串轉(zhuǎn)換成ANSI字符串,然后將結(jié)果返回給你的應(yīng)用程序。所有這些轉(zhuǎn)換操作都是在你看不見(jiàn)的情況下發(fā)生的。當(dāng)然,進(jìn)行這些字符串的轉(zhuǎn)換需要占用系統(tǒng)的時(shí)間和內(nèi)存。比如同一個(gè)函數(shù)CreateWindowEx(),在內(nèi)部其實(shí)是當(dāng)ASCII是調(diào)用CreateWindowExA(),而當(dāng)unicode時(shí)調(diào)用CreateWindowExW()。同時(shí)windows系統(tǒng)還給我們提供了ASCIIunicode間的轉(zhuǎn)化函數(shù)MultiByteToWideChar()和WideCharToMultiByte()

 

2)進(jìn)程和線(xiàn)程:進(jìn)程通常被定義為一個(gè)正在運(yùn)行的程序的實(shí)例,它由兩個(gè)部分組成,第一, 一個(gè)是操作系統(tǒng)用來(lái)管理進(jìn)程的內(nèi)核對(duì)象,內(nèi)核對(duì)象也是系統(tǒng)用來(lái)存放關(guān)于進(jìn)程的統(tǒng)計(jì)信息的地方;第二,是地址空間,它包含所有可執(zhí)行模塊或 D L L 模塊的代碼和數(shù)據(jù),它還包含動(dòng)態(tài)內(nèi)存分配的空間,如線(xiàn)程堆棧和堆分配空間。線(xiàn)程是應(yīng)用程序執(zhí)行時(shí)的最小單位,同樣線(xiàn)程也是由兩個(gè)部分組成的:第一, 一個(gè)是線(xiàn)程的內(nèi)核對(duì)象,操作系統(tǒng)用它來(lái)對(duì)線(xiàn)程實(shí)施管理,內(nèi)核對(duì)象也是系統(tǒng)用來(lái)存放線(xiàn)程統(tǒng)計(jì)信息的地方;第二,線(xiàn)程堆棧,它用于維護(hù)線(xiàn)程在執(zhí)行代碼時(shí)需要的所有函數(shù)參數(shù)和局部變量。

 

進(jìn)程是不活潑的,從來(lái)不執(zhí)行任何東西,它只是線(xiàn)程的容器,若要使進(jìn)程完成某項(xiàng)操作,它必須擁有一個(gè)在它的環(huán)境中運(yùn)行的線(xiàn)程,該線(xiàn)程負(fù)責(zé)執(zhí)行包含在進(jìn)程的地址空間中的代碼,當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),系統(tǒng)會(huì)自動(dòng)創(chuàng)建它的第一個(gè)線(xiàn)程,稱(chēng)為主線(xiàn)程,然后,該線(xiàn)程可以創(chuàng)建其他的線(xiàn)程,而這些線(xiàn)程又能創(chuàng)建更多的線(xiàn)程。如果在單進(jìn)程環(huán)境中,你有兩個(gè)或多個(gè)線(xiàn)程正在運(yùn)行,那么這兩個(gè)線(xiàn)程將共享單個(gè)地址空間。這些線(xiàn)程能夠執(zhí)行相同的代碼,對(duì)相同的數(shù)據(jù)進(jìn)行操作。這些線(xiàn)程還能共享內(nèi)核對(duì)象句柄,因?yàn)榫浔硪蕾?lài)于每個(gè)進(jìn)程而不是每個(gè)線(xiàn)程存在。

windows提供和很多函數(shù)來(lái)創(chuàng)建和管理線(xiàn)程和進(jìn)程,比如CreateThread(),ExitThread(),TerminateThread(),GetCurrentThread()CreateProcess(),ExitProcess(),TerminateProcess (),GetCurrentProcess()等。

 

3)線(xiàn)程同步和線(xiàn)程局部存儲(chǔ):由于同一進(jìn)程的所有線(xiàn)程共享進(jìn)程的虛擬地址空間,并且線(xiàn)程的中斷是匯編語(yǔ)言級(jí)的,所以可能會(huì)發(fā)生兩個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)同一個(gè)對(duì)象(包括全局變量、共享資源、API函數(shù)和MFC對(duì)象等)的情況,這有可能導(dǎo)致程序錯(cuò)誤。屬于不同進(jìn)程的線(xiàn)程在同時(shí)訪(fǎng)問(wèn)同一內(nèi)存區(qū)域或共享資源時(shí),也會(huì)存在同樣的問(wèn)題。因此,在多線(xiàn)程應(yīng)用程序中,常常需要采取一些措施來(lái)同步線(xiàn)程的執(zhí)行。

 

windows提供了3中同步機(jī)制,分別是信號(hào)量Semaphore,互斥量Mutex,關(guān)鍵代碼段CriticalSection。其中信號(hào)量Semaphore,是一個(gè)可以限制對(duì)指定的臨界段進(jìn)行訪(fǎng)問(wèn)的線(xiàn)程的數(shù)目的數(shù)據(jù)結(jié)構(gòu)。互斥量Mutex和關(guān)鍵代碼段CriticalSection,他們的作用是相同的,都是用來(lái)保證某時(shí)刻只有一個(gè)線(xiàn)程能夠訪(fǎng)問(wèn)全局或靜態(tài)的資源。區(qū)別是:Mutex是內(nèi)核對(duì)象,可以設(shè)置等待超時(shí)時(shí)間,可以在不同的進(jìn)程的線(xiàn)程中使用,但是所消耗的時(shí)間也比較多。CriticalSectionMutex相反。

 

線(xiàn)程局部存儲(chǔ)(TLS),可以為全局或靜態(tài)變量對(duì)不同的線(xiàn)程有不同的拷貝。

 

4)線(xiàn)程池:可以實(shí)現(xiàn)在程序中根據(jù)需要?jiǎng)討B(tài)的創(chuàng)建線(xiàn)程,比如在server端,根據(jù)訪(fǎng)問(wèn)的用戶(hù)的多少來(lái)創(chuàng)建線(xiàn)程的多少。在windows2000以后增加了創(chuàng)建線(xiàn)程池的API,比如 QueueUserWorkItem()。

 

5) 纖程:用戶(hù)級(jí)的線(xiàn)程機(jī)制,比線(xiàn)程小的單位,開(kāi)發(fā)人員負(fù)責(zé)管理纖程的調(diào)度,同時(shí)負(fù)責(zé)確定纖程何時(shí)在線(xiàn)程時(shí)間片上下文中運(yùn)行,一般不會(huì)帶來(lái)性能的提高,主要的目的是為開(kāi)發(fā)人員調(diào)度多個(gè)不需要并行執(zhí)行的任務(wù)提供一個(gè)便捷的機(jī)制。單線(xiàn)程可以包含一個(gè)或多個(gè)纖程。就內(nèi)核而言,線(xiàn)程是搶占調(diào)度的,是正在執(zhí)行的代碼。然而,線(xiàn)程每次執(zhí)行一個(gè)纖程的代碼,你決定究竟執(zhí)行哪個(gè)纖程,你可以調(diào)用ConvertThreadToFiber()將已有的線(xiàn)程轉(zhuǎn)化位纖程,當(dāng)對(duì)纖程的執(zhí)行環(huán)境進(jìn)行分配和初始化后,就可以將執(zhí)行環(huán)境的地址與線(xiàn)程關(guān)聯(lián)起來(lái),該線(xiàn)程被轉(zhuǎn)換成一個(gè)纖程,而纖程則在該線(xiàn)程上運(yùn)行。現(xiàn)在,如果你的纖程(線(xiàn)程)返回或調(diào)用ExitThread函數(shù),那么纖程和線(xiàn)程都會(huì)終止運(yùn)行。除非打算創(chuàng)建更多的纖程以便在同一個(gè)線(xiàn)程上運(yùn)行,否則沒(méi)有理由將線(xiàn)程轉(zhuǎn)換成纖程。若要?jiǎng)?chuàng)建另一個(gè)纖程,該線(xiàn)程(當(dāng)前正在運(yùn)行纖程的線(xiàn)程)可以調(diào)用CreateFiber函數(shù)。但是調(diào)用CreateFilber創(chuàng)建的纖程并不執(zhí)行,直到調(diào)用SwitchToFiber函數(shù)。若要撤消纖程,可以調(diào)用DeleteFiber函數(shù)。

 

6) 作業(yè):作業(yè)可以看作是一組進(jìn)程的容器,把這些進(jìn)程當(dāng)作一個(gè)整體,對(duì)這個(gè)整體整個(gè)加入更多的限制. 因?yàn)?/span>Windows并不維護(hù)進(jìn)程之間的父/子關(guān)系。即使父進(jìn)程已經(jīng)終止運(yùn)行,子進(jìn)程仍然會(huì)繼續(xù)運(yùn)行。Microsoft Windoss 2000提供了一個(gè)新的作業(yè)內(nèi)核對(duì)象,使你能夠?qū)⑦M(jìn)程組合在一起,并且創(chuàng)建一個(gè)“沙框”,以便限制進(jìn)程能夠進(jìn)行的操作。最好將作業(yè)對(duì)象視為一個(gè)進(jìn)程的容器。但是,創(chuàng)建包含單個(gè)進(jìn)程的作業(yè)是有用的,因?yàn)檫@樣一來(lái),就可以對(duì)該進(jìn)程加上通常情況下不能加的限制。創(chuàng)建一個(gè)新作業(yè)內(nèi)核對(duì)象可以調(diào)用CreateJobObject(),另一個(gè)進(jìn)程要訪(fǎng)問(wèn)作業(yè),可以通過(guò)OpenJobObject(),應(yīng)該知道,關(guān)閉作業(yè)對(duì)象并不會(huì)迫使作業(yè)中的所有進(jìn)程終止運(yùn)行。該作業(yè)對(duì)象實(shí)際上做上了刪除標(biāo)記,只有當(dāng)作業(yè)中的所有進(jìn)程全部終止運(yùn)行之后,該作業(yè)對(duì)象才被自動(dòng)撤消。注意,關(guān)閉作業(yè)的句柄后,盡管該作業(yè)仍然存在,但是該作業(yè)將無(wú)法被所有進(jìn)程訪(fǎng)問(wèn)。通過(guò)調(diào)用SetInformationJobObject()可以給作業(yè)加上各種限制.查詢(xún)限制QueryInformationJobObject(),將進(jìn)程放入作業(yè)AssignProcessToJobObject(),若要撤銷(xiāo)作業(yè)中的進(jìn)程調(diào)用TerminateJobObject()。

 

7) 虛擬內(nèi)存,內(nèi)存映射文件和堆棧:每個(gè)進(jìn)程都被賦予它自己的虛擬地址空間。對(duì)于3 2位進(jìn)程來(lái)說(shuō),這個(gè)地址空間是4 G B,其中默認(rèn)有2G是用戶(hù)可以使用的。由于每個(gè)進(jìn)程可以接收它自己的私有的地址空間,因此當(dāng)進(jìn)程中的一個(gè)線(xiàn)程正在運(yùn)行時(shí),該線(xiàn)程可以訪(fǎng)問(wèn)只屬于它的進(jìn)程的內(nèi)存。屬于所有其他進(jìn)程的內(nèi)存則隱藏著,并且不能被正在運(yùn)行的線(xiàn)程訪(fǎng)問(wèn)。注意在Windows 2000中,屬于操作系統(tǒng)本身的內(nèi)存也是隱藏的,正在運(yùn)行的線(xiàn)程無(wú)法訪(fǎng)問(wèn)。這意味著線(xiàn)程常常不能訪(fǎng)問(wèn)操作系統(tǒng)的數(shù)據(jù)。

 

Windows提供了3種進(jìn)行內(nèi)存管理的方法,它們是第一, 虛擬內(nèi)存,最適合用來(lái)管理大型對(duì)象或結(jié)構(gòu)數(shù)組。 第二,內(nèi)存映射文件,最適合用來(lái)管理大型數(shù)據(jù)流(通常來(lái)自文件)以及在單個(gè)計(jì)算機(jī)上運(yùn)行的多個(gè)進(jìn)程之間共享數(shù)據(jù)。第三, 內(nèi)存堆棧,最適合用來(lái)管理大量的小對(duì)象。

 

在較老的操作系統(tǒng)中,物理存儲(chǔ)器被視為計(jì)算機(jī)擁有的R A M的容量。換句話(huà)說(shuō),如果計(jì)算機(jī)擁有1 6 M BR A M,那么加載和運(yùn)行的應(yīng)用程序最多可以使用1 6 M BR A M。今天的操作系統(tǒng)能夠使得磁盤(pán)空間看上去就像內(nèi)存一樣。磁盤(pán)上的文件通常稱(chēng)為頁(yè)文件,它包含了可供所有進(jìn)程使用的虛擬內(nèi)存。

 

內(nèi)存映射文件與虛擬內(nèi)存一樣,內(nèi)存映射文件可以用來(lái)保留一個(gè)地址空間的區(qū)域,并將物理存儲(chǔ)器提交給該區(qū)域。它們之間的差別是,物理存儲(chǔ)器來(lái)自一個(gè)已經(jīng)位于磁盤(pán)上的文件,而不是系統(tǒng)的頁(yè)文件。一旦該文件被映射,就可以訪(fǎng)問(wèn)它,就像整個(gè)文件已經(jīng)加載內(nèi)存一樣。

 

堆棧可以用來(lái)分配許多較小的數(shù)據(jù)塊。例如,若要對(duì)鏈接表和鏈接樹(shù)進(jìn)行管理,最好的方法是使用堆棧,堆棧的優(yōu)點(diǎn)是,可以不考慮分配粒度和頁(yè)面邊界之類(lèi)的問(wèn)題,集中精力處理手頭的任務(wù)。堆棧的缺點(diǎn)是,分配和釋放內(nèi)存塊的速度比其他機(jī)制要慢,并且無(wú)法直接控制物理存儲(chǔ)器的提交和回收。進(jìn)程和線(xiàn)程都有自己的堆棧,而且大小可以更改。

 

8) DLL使用:windows中廣泛的使用dll來(lái)實(shí)現(xiàn)模塊化,dll的使用一般有靜態(tài)和動(dòng)態(tài)加載,靜態(tài)加載一般通過(guò)編譯器的設(shè)置來(lái)實(shí)現(xiàn),動(dòng)態(tài)加載通過(guò)使用loadlibrary()和freelibrary()來(lái)實(shí)現(xiàn)。

 

9)結(jié)構(gòu)化異常處理(SEH):SEH Windows 系統(tǒng)提供的異常處理功能,跟開(kāi)發(fā)工具無(wú)關(guān)。windows上其他程序中的異常處理一般底層都是轉(zhuǎn)化為SEH來(lái)實(shí)現(xiàn)。實(shí)際上,當(dāng)你寫(xiě)一條C++ throw語(yǔ)句時(shí),編譯器就生成一個(gè)對(duì)WindowsRaiseException函數(shù)的調(diào)用。用于throw語(yǔ)句的變量傳遞給RaiseException作為附加的參數(shù)。

 

Windows via c++》之新增

 

164位支持:最新的系統(tǒng)有64的版本,這樣的話(huà)進(jìn)程就不再有最大4G的內(nèi)存限制,但是由于64位系統(tǒng)與以前的32位系統(tǒng)其實(shí)是一個(gè)codebase,所以基本有所的接口都與以前32位保持椅子,這樣的話(huà)我們以前的所有的32位的程序只需要從新編譯就可以運(yùn)行在64系統(tǒng)上,需要特別注意的是指針和句柄的從32位到64位的轉(zhuǎn)變。

 

2windows vista/2008特有:提供了更加安全的stirng函數(shù),一些內(nèi)核對(duì)象的改變等。

 

3)可重復(fù)使用的代碼:大量可在我們?nèi)粘i_(kāi)發(fā)中重復(fù)使用的代碼和讓我們更好的理解進(jìn)程的源代碼processInfoLockCop等。

 

總結(jié)

總之,通過(guò)閱讀《Windows via C++》使我們更好的了解windows系統(tǒng),更好的在windows進(jìn)行C++開(kāi)發(fā)!推薦windowsC++開(kāi)發(fā)人員可以一讀!

posted on 2008-07-13 10:37 夢(mèng)在天涯 閱讀(8479) 評(píng)論(7)  編輯 收藏 引用 所屬分類(lèi): My Project

評(píng)論

# re: 《Windwos via C++》之精華 2008-07-14 10:03 mAGICfLYER

錯(cuò)字很多,錯(cuò)詞很多。  回復(fù)  更多評(píng)論   

# re: 《Windwos via C++》之精華 2008-07-14 10:32 呵呵

寫(xiě)的不錯(cuò),學(xué)習(xí)了~  回復(fù)  更多評(píng)論   

# re: 《Windwos via C++》之精華 2008-07-14 12:57 土仔

先收藏了。  回復(fù)  更多評(píng)論   

# re: 《Windwos via C++》之精華 2008-07-18 17:35 力為

不錯(cuò),期待博主的文章很久了。  回復(fù)  更多評(píng)論   

# re: 《Windwos via C++》之精華 2008-07-22 17:39 Touchsoft

應(yīng)該是《Windows核心編程》的新版吧  回復(fù)  更多評(píng)論   

# re: 《Windwos via C++》之精華 2008-07-26 03:57 冷不防

謝謝!  回復(fù)  更多評(píng)論   

# re: 《Windwos via C++》之精華 2009-10-11 16:33 Smile2life

夢(mèng)在天涯:
你好,我在編譯該書(shū)配套源碼時(shí)會(huì)遇到很多錯(cuò)誤,其中第一個(gè)錯(cuò)誤如下1>d:\programfiles\開(kāi)發(fā)工具\(yùn)vs8\vc\platformsdk\include\prsht.h(531) : error C2146: 語(yǔ)法錯(cuò)誤 : 缺少“;”(在標(biāo)識(shí)符“hdr”的前面),雙擊定位到typedef struct _PSHNOTIFY
{
NMHDR hdr;
LPARAM lParam;
} PSHNOTIFY, *LPPSHNOTIFY;好像無(wú)法識(shí)別該結(jié)構(gòu)“NMHDR ”。能不能指導(dǎo)一下阿,多謝了
  回復(fù)  更多評(píng)論   

公告

EMail:itech001#126.com

導(dǎo)航

統(tǒng)計(jì)

  • 隨筆 - 461
  • 文章 - 4
  • 評(píng)論 - 746
  • 引用 - 0

常用鏈接

隨筆分類(lèi)

隨筆檔案

收藏夾

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

積分與排名

  • 積分 - 1812156
  • 排名 - 5

最新評(píng)論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              亚洲另类自拍| 久久夜色精品国产欧美乱| 亚洲级视频在线观看免费1级| 亚洲欧美变态国产另类| 国产精品入口夜色视频大尺度| 亚洲在线观看视频网站| 在线中文字幕不卡| 国产九九视频一区二区三区| 久久国产加勒比精品无码| 欧美一区免费| 亚洲国产精品成人| 99视频在线观看一区三区| 国产精品卡一卡二| 免费高清在线视频一区·| 欧美va天堂va视频va在线| 中文av字幕一区| 先锋影音久久久| 亚洲日本va在线观看| 在线视频亚洲| 红桃视频国产精品| 欧美国产另类| 国产精品白丝黑袜喷水久久久| 久久精品道一区二区三区| 另类人畜视频在线| 一区二区欧美日韩视频| 欧美一区影院| 亚洲午夜视频在线| 久久综合电影| 香蕉久久夜色精品国产使用方法| 久久午夜电影网| 亚洲欧美综合v| 欧美激情精品久久久久久免费印度| 欧美一级大片在线观看| 久热精品视频在线观看| 日韩午夜在线播放| 伊人春色精品| 欧美一区二区高清| 亚洲无限乱码一二三四麻| 久久综合九色综合欧美狠狠| 亚洲欧美影音先锋| 欧美精品九九| 欧美顶级艳妇交换群宴| 国产欧美精品日韩精品| 日韩一本二本av| 亚洲美女中文字幕| 玖玖视频精品| 久久婷婷国产综合尤物精品 | 久久免费视频在线观看| 欧美日韩一级大片网址| 亚洲高清视频中文字幕| 韩日欧美一区| 久久精品国产第一区二区三区最新章节 | 欧美激情国产高清| 在线观看亚洲| 久久久久久久综合日本| 久久激情婷婷| 国产色视频一区| 亚洲综合日本| 欧美一级二级三级蜜桃| 国产精品乱码人人做人人爱| 99精品99| 亚洲伊人网站| 国产精品美女久久福利网站| 在线视频你懂得一区| 亚洲——在线| 国产精品久久久久久久久久ktv | 欧美电影在线观看| 亚洲国产精品久久久| 老司机午夜精品| 亚洲电影免费在线| 日韩亚洲欧美成人一区| 欧美剧在线观看| 99国产精品视频免费观看| 亚洲午夜精品17c| 国产精品久久久久久久久久直播| 国产精品99久久久久久www| 亚洲欧美三级伦理| 国产一区二区精品久久99| 欧美中文字幕在线| 欧美韩国一区| 在线视频精品一| 国产乱码精品一区二区三区不卡 | 一区二区日韩精品| 久久成年人视频| 在线欧美福利| 欧美日韩免费在线| 亚洲欧美日本视频在线观看| 久久婷婷国产综合国色天香| 最新亚洲电影| 国产精品欧美风情| 久久综合网络一区二区| 国产精品美女久久久| 久久国产黑丝| 亚洲精品少妇网址| 午夜宅男欧美| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美视频一区二区三区四区| 欧美在线资源| 日韩小视频在线观看| 久久九九有精品国产23| 日韩一级欧洲| 黄色成人av网| 国产精品久久久久毛片大屁完整版 | 欧美在线视频在线播放完整版免费观看 | 亚洲精品小视频| 国产欧美精品久久| 欧美激情精品久久久久久免费印度| 亚洲一区二三| 亚洲国产99| 久久视频在线视频| 亚洲永久精品国产| 亚洲乱码国产乱码精品精可以看| 欧美午夜无遮挡| 欧美不卡激情三级在线观看| 新67194成人永久网站| 亚洲精品一区二区在线观看| 久久亚洲午夜电影| 香蕉久久夜色精品| 中国成人亚色综合网站| 亚洲国产欧美不卡在线观看| 国产毛片一区| 国产精品久久久久久久一区探花| 欧美国产日产韩国视频| 久久久噜噜噜久久| 性色av一区二区怡红| 国产精品99久久99久久久二8 | 狠狠色伊人亚洲综合成人| 国产欧美69| 国产精品美女| 欧美视频网站| 欧美日韩国产影片| 欧美国产第二页| 午夜久久久久久| 亚洲一级影院| 中文精品视频一区二区在线观看| ●精品国产综合乱码久久久久| 欧美激情aⅴ一区二区三区| 欧美亚洲综合久久| 欧美一区二区视频在线观看2020| 亚洲私人影院在线观看| 一本大道久久a久久精品综合| 亚洲精品久久久久久一区二区| 在线免费不卡视频| 亚洲激情av| 亚洲狼人综合| 在线综合视频| 午夜国产精品视频免费体验区| 亚洲一区二区三区精品在线| 亚洲一区二区不卡免费| 中文有码久久| 翔田千里一区二区| 久久精品国产久精国产一老狼| 久久精品国产视频| 久久婷婷久久一区二区三区| 欧美fxxxxxx另类| 夜夜嗨av色综合久久久综合网 | 中文在线不卡视频| 亚洲资源av| 久久久久久999| 欧美mv日韩mv国产网站app| 欧美激情二区三区| 一区二区三区四区在线| 欧美一级淫片播放口| 久久人人精品| 欧美日韩日日夜夜| 国产午夜精品理论片a级大结局| 黄色在线成人| 日韩亚洲精品电影| 欧美在线首页| 欧美xart系列在线观看| 亚洲卡通欧美制服中文| 亚洲欧美日韩综合| 久久综合伊人77777| 国产精品v日韩精品| 激情小说另类小说亚洲欧美| 亚洲精品免费看| 欧美在线1区| 亚洲国内自拍| 先锋影音久久| 欧美日韩亚洲一区三区| 韩日欧美一区二区| 亚洲制服av| 欧美电影免费观看高清| 午夜精品999| 欧美成人免费大片| 国产一级揄自揄精品视频| 亚洲人体偷拍| 久久国产黑丝| 一本久久知道综合久久| 久久综合九色综合久99| 国产精品亚洲美女av网站| 亚洲欧洲精品一区二区三区波多野1战4| 亚洲一区二区三区高清不卡| 欧美成人激情视频| 亚洲女同在线| 国产精品毛片va一区二区三区 | 一本色道久久综合亚洲精品高清| 麻豆精品网站| 韩日欧美一区| 久久精品二区|