共用方式為


/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 連結器選項