c++ exports def文件

https://msdn.microsoft.com/zh-cn/library/hyx1zcd3(v=vs.80).aspx

EXPORTS

引入了一個由一個或多個 definitions(導出的函數或數據)組成的節。每一個定義必須在單獨一行上。函數

EXPORTS
definitions

備註 rem

EXPORTS 關鍵字能夠在第一個定義所在的同一行或前一行上。.def 文件能夠包含一個或多個 EXPORTS 語句。 get

導出 definitions 的語法爲:it

          entryname[=internalname] [@ordinal [NONAME]] [PRIVATE] [DATA]

entryname 是要導出的函數名或變量名。這是必選項。若是導出的名稱與 DLL 中的名稱不一樣,則經過 internalname 指定 DLL 中導出的名稱。例如,若是 DLL 導出函數 func1(),要將它用做 func2(),則應指定:io

EXPORTS
func2=func1

@ordinal 容許指定是序號而不是函數名將進入 DLL 的導出表。這有助於最小化 DLL 的大小。.LIB 文件將包含序號與函數之間的映射,這使您得以像一般在使用 DLL 的項目中那樣使用函數名。 import

可選的 NONAME 關鍵字容許只按序號導出,並減少結果 DLL 中導出表的大小。可是,若是要在 DLL 上使用 GetProcAddress,則必須知道序號,由於名稱將無效。 變量

可選的 PRIVATE 關鍵字禁止將 entryname 放到由 LINK 生成的導入庫中。它對一樣是由 LINK 生成的圖像中的導出無效。 語法

可選的 DATA 關鍵字指定導出的是數據,而不是代碼。例如,能夠導出數據變量,以下所示:程序

EXPORTS
i DATA

當對同一導出使用 PRIVATEDATA 時,PRIVATE 必須位於 DATA 的前面。 方法

有三種導出定義的方法,按照建議的使用順序依次爲:

  1. 源代碼中的 __declspec(dllexport) 關鍵字

  2. .def 文件中的 EXPORTS 語句

  3. LINK 命令中的 /EXPORT 規範

全部這三種方法能夠用在同一個程序中。LINK 在生成包含導出的程序時還建立導入庫,除非生成中使用了 .exp 文件。

如下是 EXPORTS 節的示例:

EXPORTS
   DllCanUnloadNow      @1     PRIVATE   DATA
   DllWindowName = Name        DATA
   DllGetClassObject    @4 NONAME   PRIVATE
   DllRegisterServer    @7
   DllUnregisterServer

注意,使用 .def 文件從 DLL 中導出變量時,不須要在變量上指定 __declspec(dllexport)。可是,在任何使用 DLL 的文件中,仍必須在數據聲明上使用 __declspec(dllimport)

相關文章
相關標籤/搜索