動(dòng)態(tài)庫(kù)靜態(tài)庫(kù)生成及顯式隱式調(diào)用

動(dòng)態(tài)庫(kù)

首先新建一個(gè)dll動(dòng)態(tài)庫(kù)


1.png

然后建立一個(gè).h頭文件,加入函數(shù)


 #ifdef 函數(shù)名_EXPORTS  
 #define 函數(shù)名_API __declspec(dllexport)  
 #else  
 #define 函數(shù)名_API __declspec(dllimport)  
 #endif    

隱式調(diào)用

·項(xiàng)目->屬性->配置屬性->VC++ 目錄-> 在“包含目錄”里添加頭文件project2.h所在的目錄


配置頭文件.png

·項(xiàng)目->屬性->配置屬性->VC++ 目錄-> 在“庫(kù)目錄”里添加頭文件project2.lib所在的目錄

庫(kù)目錄.png

·項(xiàng)目->屬性->配置屬性->鏈接器->輸入-> 在“附加依賴項(xiàng)”里添加“project2.lib”(若有多個(gè) lib 則以逗號(hào)隔開(kāi))

lib文件.png

·隱式調(diào)用源文件必須加上'#define TESTDLL_EXPORTS//不進(jìn)行宏定義,或提示鏈接不一致,導(dǎo)致隱式調(diào)用失敗'

顯式調(diào)用

直接上函數(shù)


dllfun lucky;      //先是定一個(gè)函數(shù)指針 dllfun;然后通過(guò)GetProcAdress來(lái)獲取函數(shù)的地址  
HINSTANCE hDLL;               //定一個(gè)句柄實(shí)例,用來(lái)取DLL的實(shí)例地址  
hDLL = LoadLibrary("C:\\Users\\Pomelo\\Desktop\\caculater\\caculator\\Debug\\multiply.dll");//加載動(dòng)態(tài)鏈接庫(kù)MyDll.dll文件;     
if (hDLL == NULL)                             //取的地址要判斷,返回的句柄是否為空,  
{                       //如果為無(wú)效句柄,那么要釋放加載DLL所占用的內(nèi)存  
    printf("無(wú)法載入dll\n");  
    FreeLibrary(hDLL);  
    return 0;  
}  
lucky = (dllfun)GetProcAddress(hDLL, "?Multiply@@YAMMM@Z"); //參數(shù)是DLL的句柄和你要調(diào)用的函數(shù)名  
if (lucky == NULL)  //這里也要判斷要函數(shù)指針是否為空,如果沒(méi)取到要求的函數(shù),那么要釋放句柄  
{  
    printf("無(wú)法獲取函數(shù)地址\n");  
    FreeLibrary(hDLL);  
    return 0;  
}  
c1 = lucky(a, b);                              //調(diào)用compute函數(shù),指向函數(shù)運(yùn)算結(jié)果  
cout << a << "*" << b << "的值為:" << c1 << endl;         //輸出最后計(jì)算結(jié)果  
FreeLibrary(hDLL);  

靜態(tài)庫(kù)

靜態(tài)庫(kù)建立方法和動(dòng)態(tài)庫(kù)一樣,選擇靜態(tài)庫(kù)。
靜態(tài)庫(kù)的調(diào)用只需要在屬性中vc/c++添加包含目錄(.h文件路徑)和庫(kù)目錄(.lib)文件路徑,連接器常規(guī)加入依賴項(xiàng).lib文件名。

lib.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容