動態(tài)鏈接庫dll編程

動態(tài)鏈接庫dll編程

ID:27539588

大?。?83.01 KB

頁數(shù):61頁

時間:2018-12-01

動態(tài)鏈接庫dll編程_第1頁
動態(tài)鏈接庫dll編程_第2頁
動態(tài)鏈接庫dll編程_第3頁
動態(tài)鏈接庫dll編程_第4頁
動態(tài)鏈接庫dll編程_第5頁
資源描述:

《動態(tài)鏈接庫dll編程》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、VC++動態(tài)鏈接庫(DLL)編程1.概論先來闡述一下DLL(DynamicLinkableLibrary)的概念,你可以簡單的把DLL看成一種倉庫,它提供給你一些可以直接拿來用的變量、函數(shù)或類。在倉庫的發(fā)展史上經(jīng)歷了“無庫-靜態(tài)鏈接庫-動態(tài)鏈接庫”的時代。對動態(tài)鏈接庫,需建立如下概念:(1)與具體的編程語言及編譯器無關(guān)只要遵循約定的DLL接口規(guī)范和調(diào)用方式,用各種語言編寫的DLL都可以相互調(diào)用。譬如Windows提供的系統(tǒng)DLL(其中包括了Windows的API),在任何開發(fā)環(huán)境中都能被調(diào)用,不在乎其是VisualBasic、VisualC++還是Delphi。(

2、2)動態(tài)鏈接庫隨處可見在Windows目錄下的system32文件夾中會看到kernel32.dll、user32.dll和gdi32.dll,windows的大多數(shù)API都包含在這些DLL中。kernel32.dll中的函數(shù)主要處理內(nèi)存管理和進程調(diào)度;user32.dll中的函數(shù)主要控制用戶界面(MessageBox函數(shù));gdi32.dll中的函數(shù)則負責圖形方面的操作。(3)VC動態(tài)鏈接庫的分類VisualC++支持三種DLL,它們分別是非MFC動態(tài)庫、MFC規(guī)則DLL、MFCExtensionDLL。非MFC動態(tài)庫不采用MFC類庫結(jié)構(gòu),其導出函數(shù)為標準的C接

3、口,能被非MFC或MFC編寫的應用程序所調(diào)用;MFC規(guī)則DLL包含一個繼承自CWinApp的類,但其無消息循環(huán);MFC擴展DLL采用MFC的動態(tài)鏈接版本創(chuàng)建,它只能被用MFC類庫所編寫的應用程序所調(diào)用。2.靜態(tài)鏈接庫在VC++6.0中new一個名稱為libTest的staticlibrary工程,并新建lib.h和lib.cpp兩個文件,lib.h和lib.cpp的源代碼如下://文件:lib.h#ifndefLIB_H#defineLIB_Hextern"C"intadd(intx,inty);//聲明為C編譯、連接方式的外部函數(shù)#endif//文件:lib.c

4、pp#include"lib.h"intadd(intx,inty){returnx+y;}#include#include"..lib.h"#pragmacomment(lib,"..\debug\libTest.lib")//指定與靜態(tài)庫一起連接intmain(intargc,char*argv[])?{printf("2+3=%d",add(2,3));}選擇tools、options、directories、libraryfiles菜單或選項,填入庫文件路徑4.非MFCDLL在建立的工程中添加lib.h及l(fā)ib.cpp文件,源代碼如

5、下:/*文件名:lib.h*/ #ifndefLIB_H #defineLIB_Hextern"C"int__declspec(dllexport)add(intx,inty); #endif/*文件名:lib.cpp*/ #include"lib.h"intadd(intx,inty){ returnx+y; }dllCall#include #includetypedefint(*lpAddFun)(int,int);//宏定義函數(shù)指針類型intmain(intargc,char*argv[]) { HINSTANCE

6、hDll;//DLL句柄lpAddFunaddFun;//函數(shù)指針hDll=LoadLibrary("..\Debug\dllTest.dll"); if(hDll!=NULL) {addFun=(lpAddFun)GetProcAddress(hDll,"add"); if(addFun!=NULL) {intresult=addFun(2,3);printf("%d",result); }FreeLibrary(hDll); } return0; }DLL的調(diào)用和靜態(tài)鏈接庫的調(diào)用有較大差異首先,語句typedefint(*lpAddFun)(int,int

7、)定義了一個與add函數(shù)接受參數(shù)類型和返回值均相同的函數(shù)指針類型。隨后,在main函數(shù)中定義了lpAddFun的實例addFun; 其次,在函數(shù)main中定義了一個DLLHINSTANCE句柄實例hDll,通過Win32Api函數(shù)LoadLibrary動態(tài)加載了DLL模塊并將DLL模塊句柄賦給了hDll; 再次,在函數(shù)main中通過Win32Api函數(shù)GetProcAddress得到了所加載DLL模塊中函數(shù)add的地址并賦給了addFun。經(jīng)由函數(shù)指針addFun進行了對DLL中add函數(shù)的調(diào)用; 最后,應用工程使用完DLL后,在函數(shù)main中通過Win32

8、Api函數(shù)

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。