模組定義(.def)檔案說明

來源:互聯網
上載者:User
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      "xxx_dll"

EXPORTS
add  PRIVAT

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.