C調用dll文件


一種方式是使用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;

測試圖省事,沒有做加載調用和轉換的檢測(假設加載是成功的)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM