動態(tài)庫
首先新建一個dll動態(tài)庫
然后建立一個.h頭文件乌助,加入函數(shù)
#ifdef 函數(shù)名_EXPORTS
#define 函數(shù)名_API __declspec(dllexport)
#else
#define 函數(shù)名_API __declspec(dllimport)
#endif
隱式調(diào)用
·項目->屬性->配置屬性->VC++ 目錄-> 在“包含目錄”里添加頭文件project2.h所在的目錄
·項目->屬性->配置屬性->VC++ 目錄-> 在“庫目錄”里添加頭文件project2.lib所在的目錄
·項目->屬性->配置屬性->鏈接器->輸入-> 在“附加依賴項”里添加“project2.lib”(若有多個 lib 則以逗號隔開)
·隱式調(diào)用源文件必須加上'#define TESTDLL_EXPORTS//不進行宏定義广恢,或提示鏈接不一致,導致隱式調(diào)用失敗'
顯式調(diào)用
直接上函數(shù)
dllfun lucky; //先是定一個函數(shù)指針 dllfun;然后通過GetProcAdress來獲取函數(shù)的地址
HINSTANCE hDLL; //定一個句柄實例,用來取DLL的實例地址
hDLL = LoadLibrary("C:\\Users\\Pomelo\\Desktop\\caculater\\caculator\\Debug\\multiply.dll");//加載動態(tài)鏈接庫MyDll.dll文件原杂;
if (hDLL == NULL) //取的地址要判斷挨决,返回的句柄是否為空请祖,
{ //如果為無效句柄,那么要釋放加載DLL所占用的內(nèi)存
printf("無法載入dll\n");
FreeLibrary(hDLL);
return 0;
}
lucky = (dllfun)GetProcAddress(hDLL, "?Multiply@@YAMMM@Z"); //參數(shù)是DLL的句柄和你要調(diào)用的函數(shù)名
if (lucky == NULL) //這里也要判斷要函數(shù)指針是否為空脖祈,如果沒取到要求的函數(shù)肆捕,那么要釋放句柄
{
printf("無法獲取函數(shù)地址\n");
FreeLibrary(hDLL);
return 0;
}
c1 = lucky(a, b); //調(diào)用compute函數(shù),指向函數(shù)運算結(jié)果
cout << a << "*" << b << "的值為:" << c1 << endl; //輸出最后計算結(jié)果
FreeLibrary(hDLL);
靜態(tài)庫
靜態(tài)庫建立方法和動態(tài)庫一樣盖高,選擇靜態(tài)庫慎陵。
靜態(tài)庫的調(diào)用只需要在屬性中vc/c++添加包含目錄(.h文件路徑)和庫目錄(.lib)文件路徑眼虱,連接器常規(guī)加入依賴項.lib文件名。