動(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