模組定義 def 檔案說明

2021-04-22 23:06:41 字數 1199 閱讀 9457

msdn中的名詞解釋

模組定義 (.def) 檔案為鏈結器提供有關被鏈結程式的匯出、屬性及其他方面的資訊。生成 dll 時,.def 檔案最有用。由於存在可代替模組定義語句使用的

鏈結器選項

,通常不需要 .def 檔案。也可以將

__declspec(dllexport)

用作指定匯出函式的手段。在鏈結器階段可以使用

/def(指定模組定義檔案)

鏈結器選項呼叫 .def 檔案。

如果生成的 .exe 檔案沒有匯出,使用 .def 檔案將使輸出檔案較大並降低載入速度。

通俗解釋:

在vc++中,生成dll可以不使用.def檔案。只需要在vc++的函式定義前要加__declspec(dllexport)修飾就可以了。但是使用__declspec(dllexport)和使用.def檔案是有區別的。如果dll是提供給vc++使用者使用的,你只需要把編譯dll時產生的.lib提供給使用者,它可以很輕鬆地呼叫你的dll。但是如果你的dll是供其他程式如vb、delphi,以及.net

使用者使用的,那麼會產生乙個小麻煩。因為vc++對於__declspec(dllexport)宣告的函式會進行名稱轉換,如下面的函式:

__declspec(dllexport) int __stdcall iswinnt()

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

declare function iswinnt lib "my.dll" alias "iswinnt@0" () as long

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

exports後面的數可以不給,系統會自動分配乙個數。對於vb、pb、delphi使用者,通常使用按名稱進行呼叫的方式,這個數關係不大,但是對於使用.lib鏈結的vc程式來說,不是按名稱進行呼叫,而是按照這個數進行呼叫的,所以最好給出。

例子:我們用vc6.0製作乙個dll,不使用.def檔案,在標頭檔案中這樣寫

#ifndef lib_h

#define lib_h

extern "c" int _declspec(dllexport)add(int x,int y);

#endif

如果是.def檔案,可以這樣

library      "***_dll"

exports

add  privat

模組定義檔案 def

msdn中的名詞解釋 模組定義 def 檔案為鏈結器提供有關被鏈結程式的匯出 屬性及其他方面的資訊。生成 dll 時,def檔案最有用。由於存在可代替模組定義語句使用的 鏈結器選項 通常不需要 def 檔案。也可以將 declspec dllexport 用作指定匯出函式的手段。在鏈結器階段可以使用...

DEF檔案說明

dll中匯出函式的宣告有兩種方式 1 為在函式宣告中加上 declspec dllexport 這裡不再舉例說明 2 是採用模組定義 def 檔案宣告,def檔案為鏈結器提供了有關被鏈結程式的匯出 屬性及其他方面的資訊。首先建立 乙個dll程式,cpp中 int stdcall add int nu...

DLL的模組定義檔案( DEF)

動態連線庫函式或者成員的匯出可以用 declspec dllexport 來實現,比如為了匯出void sayhello 函式,則在dll檔案中這麼宣告 或者定義 declspec dllexport void sayhello 也可以不用 declspec dllexport 而採用.def檔案來...