DLL中匯出函式的兩種方式

2021-05-21 12:06:00 字數 2016 閱讀 4251

dll中匯出函式的兩種方式(dllexport與.def檔案)

(2009-03-06 11:34:58)

標籤:dll匯出函式

兩種方式

__declspec

dllexport

.def

檔案it

分類:程式設計技術

dll中匯出函式的宣告有兩種方式:

一種方式是:在函式宣告中加上__declspec(dllexport);

另外一種方式是:採用模組定義(.def)檔案宣告,(.def)檔案為鏈結器提供了有關被鏈結程式的匯出、屬性及其他方面的資訊。

方式一:在函式宣告中加上__declspec(dllexport)

/// 在動態鏈結庫程式中

/// 宣告動態鏈結庫(**.dll)的對外介面函式testfuction

extern "c" __declspec(dllexport) int testfuction(int ntype,char *strpath,std::vector&vecdata)

/// 在外部希望呼叫動態鏈結庫的程式中

/// 載入動態鏈結庫(**.dll)並呼叫其對外介面testfuction

void func()

//定義乙個與函式testfuction型別相同的函式指標lpproc

testdll lpproc;

//搜尋**.dll中函式名為testfuction的對外介面

lpproc = (testdll)getprocaddress (hmod,"testfuction");

//如果搜尋成功

if(null != lpproc)

//...

//在恰當的時候釋放動態鏈結庫**.dll

freelibrary(hmod);

}方式二:採用模組定義(.def)檔案宣告

首先建立 乙個dll程式(dlltestdef)

在*.cpp中

int __stdcall add(int numa, int numb)

int __stdcall sub(int numa, int numb)

然後建立乙個.def的檔案,在裡面加上

最後建立乙個測試程式:.cpp檔案如下:

#include

#include

using namespace std;

typedef int (__stdcall *fun)(int, int);

hinstance hinstance;

fun   fun;

int main()

cout << fun(1, 2) << endl;

freelibrary(hinstance);

return 0;

}說明:

.def檔案的規則為:

(1)library語句說明.def檔案相應的dll;

(2)exports語句後列出要匯出函式的名稱。可以在.def檔案中的匯出函式名後加@n,表示要匯出函式的序號為n(在進行函式呼叫時,這個序號將發揮其作用);

(3).def 檔案中的注釋由每個注釋行開始處的分號 (;) 指定,且注釋不能與語句共享一行。

(4)使用__declspec(dllexport)和使用.def檔案是有區別的。

如果你的dll是提供給vc使用者使用的,你只需要把編譯dll時產生的.lib提供給使用者,

它可以很輕鬆地呼叫你的dll。但是如果你的dll是供vb、pb、delphi使用者使用的,那麼會產生乙個小麻煩。

因為vc++編譯器對於__declspec(dllexport)宣告的函式會進行名稱轉換,如下面的函式:

__declspec(dllexport) int __stdcall add()

會轉換為add@0,這樣你在vb中必須這樣宣告:

declare function add lib "dlltestdef.dll" alias "add@0" () as long

@後面的數由於引數型別不同而可能不同。這顯然不太方便。所以如果要想避免這種轉換,就要使用.def檔案方式匯出函式了。

DLL中匯出函式的兩種方式

經常使用vc6的dependency檢視dll匯出函式的名字,會發現有dll匯出函式的名字有時大不相同,導致不同的原因大多是和編譯dll時候指定dll匯出函式的界定符有關係。vc 支援兩種語言 即c c 這也是造成dll匯出函式差異的根源 我們用vs2008新建個dll工程,工程名為 testdll...

DLL中匯出函式的兩種方式

dll中匯出函式的兩種方式 dllexport與.def檔案 2009 03 06 11 34 58 標籤 dll匯出函式 兩種方式 declspec dllexport def 檔案it 分類 程式設計技術 dll中匯出函式的宣告有兩種方式 一種方式是 在函式宣告中加上 declspec dlle...

DLL中匯出函式的兩種方式

dll中匯出函式的兩種方式 dllexport與.def檔案 2009 03 06 11 34 58 標籤 dll匯出函式 兩種方式 declspec dllexport def 檔案it 分類 程式設計技術 dll中匯出函式的宣告有兩種方式 一種方式是 在函式宣告中加上 declspec dlle...