VC++共用函數(shù),VC++動(dòng)態(tài)鏈接庫(kù)編程徐射雕收集,VC++動(dòng)態(tài)鏈接庫(kù)(DLL)編程:宋寶華.
先來(lái)闡述一下 DLL(Dynamic Linkable Library) 的概念,你可以簡(jiǎn)單的把 DLL 看成一種倉(cāng)庫(kù),它提供給你一些可以直接拿來(lái)用的變量、函數(shù)或類(lèi)。在倉(cāng)庫(kù)的發(fā)展史上經(jīng)歷了 “ 無(wú)庫(kù)-靜態(tài)鏈接庫(kù)-動(dòng)態(tài)鏈接庫(kù) ” 的時(shí)代。靜態(tài)鏈接庫(kù)與動(dòng)態(tài)鏈接庫(kù)都是共享代碼的方式,如果采用靜態(tài)鏈接庫(kù),則無(wú)論你愿不愿意, lib 中的指令都被直接包含在最終生成的 EXE 文件中了。但是若使用 DLL ,該 DLL 不必被包含在最終 EXE 文件中, EXE 文件執(zhí)行時(shí)可以“ 動(dòng)態(tài) ”地引用和卸載這個(gè)與 EXE 獨(dú)立的 DLL 文件。靜態(tài)鏈接庫(kù)和動(dòng)態(tài)鏈接庫(kù)的另外一個(gè)區(qū)別在于靜態(tài)鏈接庫(kù)中不能再包含其他的動(dòng)態(tài)鏈接庫(kù)或者靜態(tài)庫(kù),而在動(dòng)態(tài)鏈接庫(kù)中還可以再包含其他的動(dòng)態(tài)或靜態(tài)鏈接庫(kù)。
對(duì)動(dòng)態(tài)鏈接庫(kù),我們還需建立如下概念:
( 1 ) DLL 的編制與具體的編程語(yǔ)言及編譯器無(wú)關(guān)
只要遵循約定的 DLL 接口規(guī)范和調(diào)用方式,用各種語(yǔ)言編寫(xiě)的 DLL 都可以相互調(diào)用。
譬如 Windows 提供的系統(tǒng) DLL (其中包括了 Windows 的 API ),在任何開(kāi)發(fā)環(huán)境中都能被調(diào)用,不在乎其是 Visua l Basic 、 Visua l C++ 還是 Delphi 。
( 2 )動(dòng)態(tài)鏈接庫(kù)隨處可見(jiàn)
我們?cè)?Windows 目錄下的 system32 文件夾中會(huì)看到 kernel32.d ll 、 user32.d ll 和 gdi32.dll ,windows 的大多數(shù) API 都包含在這些 DLL 中。 kernel32.d ll 中的函數(shù)主要處理內(nèi)存管理和進(jìn)程調(diào)度; user32.d ll 中的函數(shù)主要控制用戶(hù)界面; gdi32.dll 中的函數(shù)則負(fù)責(zé)圖形方面的操作 。
一般的程序員都用過(guò)類(lèi)似 MessageBox 的函數(shù),其實(shí)它就包含在 user32.d ll 這個(gè)動(dòng)態(tài)鏈接庫(kù)中。由此可見(jiàn) DLL 對(duì)我們來(lái)說(shuō)其實(shí)并不陌生。
(3)VC 動(dòng)態(tài)鏈接庫(kù)的分類(lèi)
Visua l C++ 支持三種 DLL ,它們分別是 Non-MFC DLL (非 MFC 動(dòng)態(tài)庫(kù))、 MFC Regul arDLL ( MFC 規(guī)則 DLL )、 MFC Extension DLL ( MFC 擴(kuò)展 DLL )。