EXPORTS

加入為匯出函式或資料的一個或多個 definitions 的區段。每一個定義都必須寫在不同的程式行中。

EXPORTS
definitions

備註

EXPORTS 關鍵字可以和第一個定義位於同一行或前一行。.def 檔可以包含一個或多個 EXPORTS 陳述式。

匯出 definitions 的語法為:

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

entryname 是您要匯出的函式或變數名稱。這是必要項。如果您匯出的名稱與 DLL 中的名稱不同,請以 internalname 指定 DLL 中的匯出名稱。例如,如果 DLL 匯出函式 func1() 而您希望將它當做 func2() 來使用,就可以指定:

EXPORTS
func2=func1

@ordinal 可讓您指定一個將存入 DLL 匯出表中的數字 (非函式名稱)。這個值有助於縮小 DLL 的大小。.LIB 檔將包含序數與函式之間的對應,可讓您使用通常會在使用 DLL 的專案中採用的函式名稱。

選擇性的 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)

請參閱

參考

模組定義陳述式的規則