資源描述:
《vc中使用動態(tài)鏈接庫dll》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、VC中使用動態(tài)鏈接庫DLL:靜態(tài)調(diào)用和動態(tài)調(diào)用2010-05-0215:56VC中生成DLL的辦法見:www.codeproject.com/KB/DLL/RegDLL.aspx--------------------------------------VC中使用DLLhttp://www.cnblogs.com/c1230v/articles/1401448.html調(diào)用DLL有兩種方法:靜態(tài)調(diào)用和動態(tài)調(diào)用.(一).靜態(tài)調(diào)用其步驟如下:1.把你的youApp.DLL拷到你目標(biāo)工程(需調(diào)用youApp.DLL的工程)的Debug目錄下;2.把你的y
2、ouApp.lib拷到你目標(biāo)工程(需調(diào)用youApp.DLL的工程)目錄下;3.把你的youApp.h(包含輸出函數(shù)的定義)拷到你目標(biāo)工程(需調(diào)用youApp.DLL的工程)目錄下;4.打開你的目標(biāo)工程選中工程,選擇VisualC++的Project主菜單的Settings菜單;5.執(zhí)行第4步后,VC將會彈出一個(gè)對話框,在對話框的多頁顯示控件中選擇Link頁。然后在Object/librarymodules輸入框中輸入:youApp.lib6.選擇你的目標(biāo)工程HeadFiles加入:youApp.h文件;7.最后在你目標(biāo)工程(*.cpp,需要調(diào)用D
3、LL中的函數(shù))中包含你的:#include"youApp.h"注:youApp是你DLL的工程名。(二).動態(tài)調(diào)用其程序如下:動態(tài)調(diào)用時(shí)只需做靜態(tài)調(diào)用步驟1.01{02HINSTANCEhDllInst=LoadLibrary("youApp.DLL");03if(hDllInst)04{05typedefDWORD(WINAPI*MYFUNC)(DWORD,DWORD);06MYFUNCyouFuntionNameAlias=NULL;07//youFuntionNameAlias函數(shù)別名08youFuntionNameAlias=(MYFUNC
4、)GetProcAddress(hDllInst,"youFuntionName");09//youFuntionName在DLL中聲明的函數(shù)名10if(youFuntionNameAlias)11{12youFuntionNameAlias(param1,param2);13}14FreeLibrary(hDllInst);15}16}顯式(靜態(tài))調(diào)用:LIB+DLL+.H,注意.H中dllexport改為dllimport隱式(動態(tài))調(diào)用:DLL+函數(shù)原型聲明,先LoadLibrary,再GetProcAddress(即找到DLL中函數(shù)的地址)
5、,不用后FreeLibrary--------------------------------------動態(tài)鏈接庫DLL的鏈接http://blog.donews.com/mmycly/archive/2006/06/15/917076.aspx應(yīng)用程序使用DLL可以采用兩種方式:一種是隱式鏈接,另一種是顯式鏈接。在使用DLL之前首先要知道DLL中函數(shù)的結(jié)構(gòu)信息。VisualC++6.0在VCbin目錄下提供了一個(gè)名為Dumpbin.exe的小程序,用它可以查看DLL文件中的函數(shù)結(jié)構(gòu)。另外,Windows系統(tǒng)將遵循下面的搜索順序來定位DLL:1
6、.包含EXE文件的目錄,2.進(jìn)程的當(dāng)前工作目錄,3.Windows系統(tǒng)目錄,4.Windows目錄,5.列在Path環(huán)境變量中的一系列目錄。(一).隱式鏈接隱式鏈接就是在程序開始執(zhí)行時(shí)就將DLL文件加載到應(yīng)用程序當(dāng)中。實(shí)現(xiàn)隱式鏈接很容易,只要將導(dǎo)入函數(shù)關(guān)鍵字_declspec(dllimport)函數(shù)名等寫到應(yīng)用程序相應(yīng)的頭文件中就可以了。下面的例子通過隱式鏈接調(diào)用MyDll.dll庫中的Min函數(shù)。首先生成一個(gè)項(xiàng)目為TestDll,在DllTest.h、DllTest.cpp文件中分別輸入如下代碼:01//Dlltest.h02#pragmaco
7、mment(lib,"MyDll.lib")03extern"C"_declspec(dllimport)intMax(inta,intb);04extern"C"_declspec(dllimport)intMin(inta,intb);05//TestDll.cpp06#include07#include"Dlltest.h"08voidmain()09{10inta;11a=min(8,10)12printf("比較的結(jié)果為%d",a);13}在創(chuàng)建DllTest.exe文件之前,要先將MyDll.dll和MyDll.lib拷貝到當(dāng)前工程
8、所在的目錄下面,也可以拷貝到windows的System目錄下。如果DLL使用的是def文件,要?jiǎng)h除TestDll.h文件