Posted on 2007-12-08 19:57
orlando 閱讀(518)
評(píng)論(0) 編輯 收藏 引用
SDK是Software Development Kit的縮寫,中文意思是“軟件開發(fā)工具包”。這是一個(gè)覆蓋面相當(dāng)廣泛的名詞,可以這么說:輔助開發(fā)某一類軟件的相關(guān)文檔、范例和工具的集合都可以叫做“SDK”。具體到我們這個(gè)系列教程,我們后面只討論廣義 SDK 的一個(gè)子集——即開發(fā) Windows 平臺(tái)下的應(yīng)用程序所使用的 SDK。
其實(shí)上面只是說了一個(gè) SDK 大概的概念而已,理解什么是 SDK 真有這么容易嗎?恐怕沒這么簡(jiǎn)單!為了解釋什么是 SDK 我們不得不引入 API、動(dòng)態(tài)鏈接庫、導(dǎo)入庫等等概念。^_^,不要怕,也就是幾個(gè)新的名詞而已,我也是到了大學(xué)快結(jié)束的時(shí)候才體會(huì)到其實(shí)學(xué)習(xí)新知識(shí)就是在學(xué)習(xí)新名詞、新概念和新術(shù)語。
首先要接觸的是“API”,也就是 Application Programming Interface,其實(shí)就是操作系統(tǒng)留給應(yīng)用程序的一個(gè)調(diào)用接口,應(yīng)用程序通過調(diào)用操作系統(tǒng)的 API 而使操作系統(tǒng)去執(zhí)行應(yīng)用程序的命令(動(dòng)作)。其實(shí)早在 DOS 時(shí)代就有 API 的概念,只不過那個(gè)時(shí)候的 API 是以中斷調(diào)用的形式(INT 21h)提供的,在 DOS 下跑的應(yīng)用程序都直接或間接的通過中斷調(diào)用來使用操作系統(tǒng)功能,比如將 AH 置為 30h 后調(diào)用 INT 21h 就可以得到 DOS 操作系統(tǒng)的版本號(hào)。而在 Windows 中,系統(tǒng) API 是以函數(shù)調(diào)用的方式提供的。同樣是取得操作系統(tǒng)的版本號(hào),在 Windows 中你所要做的就是調(diào)用 GetVersionEx() 函數(shù)。可以這么說,DOS API 是“Thinking in 匯編語言”的,而 Windows API 則是“Thinking in 高級(jí)語言”的。DOS API 是系統(tǒng)程序的一部分,他們與系統(tǒng)一同被載入內(nèi)存并且可以通過中斷矢量表找到他們的入口,那么 Windows API 呢?要說明白這個(gè)問題就不得不引入我們下面要介紹得這個(gè)概念——DLL。
DLL(又是一個(gè)縮寫,感覺 IT 這個(gè)行業(yè)里三字頭縮寫特別多),即 Dynamic Link Library(動(dòng)態(tài)鏈接庫)。我們經(jīng)常會(huì)看到一些 .dll 格式的文件,這些文件就是動(dòng)態(tài)鏈接庫文件,其實(shí)也是一種可執(zhí)行文件格式。跟 .exe 文件不同的是,.dll 文件不能直接執(zhí)行,他們通常由 .exe 在執(zhí)行時(shí)裝入,內(nèi)含有一些資源以及可執(zhí)行代碼等。其實(shí) Windows 的三大模塊就是以 DLL 的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了 API 函數(shù)的執(zhí)行代碼。為了使用 DLL 中的 API 函數(shù),我們必須要有 API 函數(shù)的聲明(.H)和其導(dǎo)入庫(.LIB),函數(shù)的原型聲明不難理解,那么導(dǎo)入庫又是做什么用的呢?我們暫時(shí)先這樣理解:導(dǎo)入庫是為了在 DLL 中找到 API 的入口點(diǎn)而使用的。
所以,為了使用 API 函數(shù),我們就要有跟 API 所對(duì)應(yīng)的 .H 和 .LIB 文件,而 SDK 正是提供了一整套開發(fā) Windows 應(yīng)用程序所需的相關(guān)文件、范例和工具的“工具包”。到此為止,我們才真正的解釋清楚了 SDK 的含義。
由于 SDK 包含了使用 API 的必需資料,所以人們也常把僅使用 API 來編寫 Windows 應(yīng)用程序的開發(fā)方式叫做“SDK 編程”。而 API 和 SDK 是開發(fā) Windows 應(yīng)用程序所必需的東西,所以其它編程框架和類庫都是建立在它們之上的,比如 VCL 和 MFC,雖然他們比起“SDK 編程”來有著更高的抽象度,但這絲毫不妨礙它們?cè)谛枰臅r(shí)候隨時(shí)直接調(diào)用 API 函數(shù)。
說說SDK
時(shí)下學(xué)計(jì)算機(jī)的大多想學(xué)編程,且大部分都是在Windows下工作的,而目前學(xué)得最熱門的是VC,大多數(shù)人一開始就開始學(xué)習(xí)VC,VC是以C++為語言基礎(chǔ)的開發(fā)工具,而C++是C語言的擴(kuò)充,故要學(xué)好VC最好是先學(xué)好C和C++。
用VC編寫Windows程序有兩種:1. Windwos c方式(SDK),2. C++方式:即對(duì)SDK函數(shù)進(jìn)行包裝,如VC的MFC,BCB的OWL等。SDK編程就是直接調(diào)用Windows的API進(jìn)行編程,平時(shí)人們常說"用 SDK寫程序"就是指用Windows的API函數(shù)來寫程序,API由上千個(gè)API函數(shù)組成(Win95的API有兩千多個(gè))。而MFC是API的封閉,結(jié)合面向?qū)ο蟪绦蛟O(shè)計(jì)的繼承性和多態(tài)性組成一個(gè)個(gè)的"類",共由一百多個(gè)類組成。盡管MFC比SDK方便,但要深入VC,直接去學(xué)MFC卻是不明智的選擇。只有在熟悉了MFC的運(yùn)行機(jī)制的情況下,才有可能深入下去。所以學(xué)VC最好是先學(xué)用SDK編寫程序,在此期間掌握Windows操作系統(tǒng)的工作原理和各API函數(shù)的應(yīng)用,然后再深入MFC。
編程環(huán)境
我們?nèi)匀挥肰C6的IDE(集成開發(fā)環(huán)境)來編寫SDK程序,啟動(dòng)VC6后選擇File菜單的New...選項(xiàng),在出現(xiàn)的New對(duì)話框的Projects標(biāo)簽內(nèi)選擇Win32 Application,然后在Projects Name指定項(xiàng)目的名字,在Location中指定路徑后按OK按鈕,在出現(xiàn)的對(duì)話框中,如果你想要用C語言來寫程序可以選擇An emtpy project,如果你想創(chuàng)建一個(gè)帶有WinMain入口函數(shù)和普通參數(shù)的設(shè)定的項(xiàng)目,可以選擇A simple Win32 application,如果您想創(chuàng)建一個(gè)簡(jiǎn)單典型的“Hello World!”Win32SDK application應(yīng)用程序,可以選擇A typical "Hello World!" application。確定項(xiàng)目類型后按Finish完成。
在VC6環(huán)境下,你依然可以使用資源編輯器和ClassWizar等工具完成程序的編寫。用SDK編寫程序關(guān)鍵是能夠程序的來龍去脈,當(dāng)然那樣效率會(huì)很低,不比VB、PB那么快,任何東西都是有得有失,如你熟悉用SDK寫程序后,對(duì)MFC會(huì)比較容易上手的,關(guān)鍵要熟悉C++的三大特性。