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
當您在同一個匯出使用 PRIVATE 和 DATA 時,PRIVATE 必須寫在 DATA 之前。
以下是三種匯出定義的方法,以建議使用的順序列出:
原始程式碼中的 __declspec(dllexport) 關鍵字
.def 檔中的 EXPORTS 陳述式
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)。