一種方式是使用Lib文件,配合dll文件;另外一種是動態調用。
例如寫了一個庫的項目,導出函數的聲明如下:
/*生成一個隨機數p,1<=p<=x*/ extern "C" __declspec(dllexport) unsigned int RandomUINT(unsigned int x);
編譯后會有*.lib和*.dll文件。首先這里要澄清一下這個lib文件。通常lib文件分兩種,一種是靜態鏈接庫,包含了函數等數據的代碼,這個不在此討論范圍;另外一種是配合dll文件使用的,這里面沒有代碼,這個lib用於靜態調用dll,我們要討論的就是這種lib。
靜態調用
在使用這個函數的文件中加上:
//靜態鏈接 #pragma comment(lib, "E:\\Test\\Debug\\xddll.lib") extern "C" __declspec(dllexport) unsigned int RandomUINT(unsigned int x);
然后就可以在代碼中像調用本地函數一樣,愉快地調用這個函數了。
在可執行文件編譯完成以后,lib文件可以刪除,但是dll文件還是要保留的。
動態調用
這個稍微麻煩,但是更常見一些,畢竟很多都是直接丟給你一個dll文件。
首先,你要根據函數原型,定義一個函數指針,這個不是必須的,但是會比較方便:
typedef unsigned int (*DLLRandomINT)(unsigned int);
接下來就是如何在代碼中使用:
HMODULE hLib = LoadLibrary(TEXT("xddll.dll")); DLLRandomINT rndint=(DLLRandomINT)GetProcAddress(hLib, "RandomUINT"); cout << rndint(50) << endl;
測試圖省事,沒有做加載調用和轉換的檢測(假設加載是成功的)。