????????????"SDK" ? :Software ? Development ? Kit,常譯為軟件開發(工具)包,在Win32編程領域一般指與MFC這類框架編程相區別的,直接調用API的開發方式,與字面原意有一些區別。另外一個經常見到的說法就是某軟件(硬件)帶有自己的一套SDK,這里其實一般是指一套API庫函數或者類庫,供上一層的開發者調用。又譬如常說的DX的SDK,其實是微軟開發的一套COM組件,供上層開發者使用。總之,供程序員使用的比較完備的代碼庫,就可以稱之為SDK; ?
? ? ? ? ? “MFC”:這個詞在這里討論好像有點班門弄斧的感覺:)還是說一下吧。Microsoft ? Framework ? classes(不知道對不對,汗...),大家都知道,使用SDK編程往往有很多每次都要重復的固定不變的一些代碼,為了提高編程的效率,減少上千個API帶給開發人員巨大的精神壓力,微軟開發出了這么一個類庫,注意,這個類庫與操作系統本身無任何關系,它只是對API進行了一個面向對象的封裝,當然,還給出了一系統編程采用的框架。使用SDK的方法,使用Visual ? Studio,通過調用API,MFC你也可以做得出來。MFC把一些固定不變的代碼已經寫好了,只在編譯時候鏈上,所以我們的代碼里看不到WinMain(),而事實上整個程序的運行,和SDK的方式無任何區別,初學者請記住這一點。
????????????"API":Application ? Programming ? Interface,這個詞的出現頻率就更高了,從某種意義上來說,也些可以看作是SDK的一個子集。這也是做給程序員的程序,不過一般指用導出函數的方式提供服務的函數庫,不包括類庫和組件。 ?
? ? ? ? ? “GDI”:Graphic ? Device ? Interface,這個是Win32程序下最常用的顯示方式,與DirectX、OpenGL處于同一級。在DOS要顯示一些東東可不是容易的事,最簡單的是調用一些C的圖形庫函數來實現顯示,不過一般也就是些畫線,填色,輸出幾個文字,效果很弱(所以DOS程序界面一般都不怎么樣),要復雜一點的動畫/圖片顯示什么的,經常要用到的就是硬件中斷,調用一些顯卡子程序來做。因為每一個顯卡都不同,所以DOS的游戲兼容常常由于顯卡的差異而很糟糕。到Windows下大家就幸福多了,Windows將硬件這一層屏蔽起來,用一個表格(Device ? Context)來代表一個顯示,我們要做的就是在這個表格上填好相關參數,然后畫上我們想畫的東東,然后操作系統會依照這個表格(DC),把相應的顯示內容(一般是一塊顯示內存)傳送到指定顯卡的指定的顯存,再由顯卡傳給顯示屏。我們不再需要與不同的顯卡打交通,這是一個十分偉大的勝利!GDI中最常用的是雙緩存技術,也就是說你可以在內存中創建(也就是復制)一個DC,只不過在這個DC中顯示的不再被傳送到顯示器上。有什么用呢?因為它的各參數是與當前屏幕DC一致的(COPY嘛 ? ,當然是這樣),所以它的顯示內容可以完整無失真地傳送到屏幕DC上。我們通常在內存DC上畫圖,譬如畫一圓,再畫一條直線,畫完后一次性地傳送到屏幕DC上,這樣對用戶來說屏幕只刷新了一次,可以解決你畫一點內容屏幕即刷新一次導致的閃爍問題。當然,雙緩沖甚至多緩沖還有很多別的用處,那就要靠自己揣摩了。
??????????????"DirectX" ? :通常簡稱為DX(讀音:低叉)這是個很吸引人眼球的名詞,讀起來就很上口:)Windows為我們作了許多屏蔽底層硬件的工作,其中DX是最知名的技術之一。操作系統要與各類硬件打交通,特別是多媒體相關的,譬如顯卡、聲卡、手柄輸入、多媒體流的網絡傳輸等等,這些事情如果都自己來弄的話,那就太要命了(這些一般都涉及系統底層,自己也很難做出來)。而DX則正是這么一套操作系統提供的隔離多媒體硬件與程序員的間質,通過它我們可以非常簡單而快速地調用硬件提供的各類服務。它主要包括DirectDraw(通過直接訪問顯示硬件來提供快速的圖象處理能力),DirectSound(提供了軟硬件的低延遲聲音混頻和回放,以及直接訪問音頻設備的能力),DirectPlay ? (它明確的提供了通用環境連接能力來簡化你應用程序之間的通訊服務),Direct3D(DirectDraw的3D版)DirectInput(簡化你的應用程序訪問鼠標、鍵盤和操縱桿設備的能力),DX5.0之后又增加了一些(如DirectShow),不再詳述。DX一個重要的特點就是你可以通過它直接訪問硬件而無需知道硬件的具體細節。譬如DirectDraw,就能夠越過內存而直接訪問顯存,這樣的速度將比GDI快很多,不在一個數量級上。補充一點:DX是以組件的方式提供的,而不是通常的導出API的形式。DX ? SDK的最新版本是9.0 ?
? ? ? ? ? "COM”:component ? object ? model,組件對象模型,一般簡稱組件。這是微軟為了解決代碼重用的一個重要機制。重用代碼的最簡單辦法是源代碼重用,把寫好的函數和類加到自己當前的代碼中,編譯即可。簡單是簡單,敝病卻顯然地多。另一個常用的方法是單獨做成模塊,以DLL的形式分發,DLL導出函數或者類,客戶程序用動態/靜態鏈接的方法將其加載,這顯然比前一種源代碼的重要好一些,難度也不大,最為常用。但DLL也有一些不足,最根本的,它不是二進制兼容,DLL版本升級一次就需要與客戶程序代碼重鏈接一次,有些時候這幾乎是不可能的任務。為了更好地讓編程像“搭積木”一樣簡單,讓模塊可以完美地配合,完美地替換,COM產生了。COM不是類庫,不是代碼,不是操作系統的服務,而是一套編程模型,理論上來說,它與語言無關,與操作系統無關,unix下同樣可以做COM。COM是一種程序結構模型標準,你做的DLL或EXE在結構上滿足這么一個標準,那這個DLL或EXE就是一個組件,它將在該平臺上成為二進制兼容。COM主要利用了注冊表來登記本模塊的信息。客戶程序調用時首先查注冊表,找到所需組件的位置(這實現了位置透明),然后就用Loadlibrary把它加載進來,這和普通調用沒有本質區別,區別在于由于組件特殊的實現方法使得整個過程中用戶程序都不知道組件的位置,組件的類的實例化過程,如何銷毀,不能直接訪問組件的任何實現細節,用戶只與組件的幾個public接口打交道。這將實現真正的模塊之間的獨立。對用戶程序而言,對于目標組件的認識,除了接口,一無所知。在接口不變的情況下,組件可任意替換而客戶程序不作任何改動,無需編譯,僅這一點,在中大型程序的模塊集成的過程中就將節約相當多的時間。
posted on 2006-05-14 12:41
太極虎~宏 閱讀(125)
評論(0) 編輯 收藏 引用