共用方式為


/EXPORT (匯出函式)

依名稱或序數或資料,從程式匯出函式。

語法

/EXPORT: entryname [ ,@ ordinal [ ,NONAME ]][ ,DATA ]

備註

/EXPORT 選項會指定要從程式匯出的函式或資料項目,讓其他程式可以呼叫 函式或使用資料。 匯出通常會在 DLL 中定義。

entryname 是函式或資料項目的名稱,因為它是由呼叫程式使用。 序數 會指定索引到範圍 1 到 65,535 的匯出資料表;如果您未指定 序數 ,LINK 會指派一個索引。 NONAME 關鍵字只會將函式匯出為序數,而不使用 entryname

DATA 關鍵字會指定匯出的專案是資料項目。 用戶端程式中的資料項目必須使用 extern __declspec(dllimport) 宣告

匯出定義的方法有四種,以建議的使用順序列出:

  1. 原始程式碼中的 __declspec(dllexport)

  2. .def 檔案中的 EXPORTS 語句

  3. LINK 命令中的 /EXPORT 規格

  4. 原始程式碼中的批註 指示詞,格式 #pragma comment(linker, "/export: definition ") 為 。

所有這些方法都可以在相同的程式中使用。 當 LINK 建置包含匯出的程式時,它也會建立匯入程式庫,除非建置中使用 .exp 檔案。

LINK 使用裝飾形式的識別碼。 編譯器會在建立 .obj 檔案時裝飾識別碼。 如果 entryname 指定給連結器格式為未取消編碼的格式(如原始程式碼所示),LINK 會嘗試比對名稱。 如果找不到唯一相符專案,LINK 會發出錯誤訊息。 當您需要將識別碼指定給連結器時,請使用 DUMPBIN 工具取得 識別碼的裝飾名稱 形式。

注意

請勿指定宣告 __cdecl__stdcall 的 C 識別碼裝飾形式。

如果您需要匯出未編碼的函式名稱,並根據組建組態而有不同的匯出(例如,在 32 位或 64 位組建中),您可以針對每個組態使用不同的 DEF 檔案。 (DEF 檔案中不允許預處理器條件指示詞。或者,您可以在函式宣告之前使用 #pragma comment 指示詞,如這裡所示,其中 PlainFuncName 是未編碼的名稱,而 _PlainFuncName@4 是函式的裝飾名稱:

#pragma comment(linker, "/export:PlainFuncName=_PlainFuncName@4")
BOOL CALLBACK PlainFuncName( Things * lpParams)

在 Visual Studio 開發環境中設定這個連結器選項

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性

  2. 選取 [ 組態屬性 > 連結器 > 命令列 ] 屬性頁。

  3. 在 [ 其他選項] 方塊中輸入選項。

若要以程式設計方式設定這個連結器選項

另請參閱

MSVC 連結器參考
MSVC 連結器選項