/EXPORT (Funktion exportieren)

Exportiert eine Funktion nach Namen oder Ordnungszahl oder Daten aus Ihrem Programm.

Syntax

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

Hinweise

Die Option /EXPORT gibt eine Funktion oder ein Datenelement an, das aus Ihrem Programm exportiert werden soll, damit andere Programme die Funktion aufrufen oder die Daten verwenden können. Exporte werden in der Regel in einer DLL definiert.

Der Eintragsname ist der Name der Funktion oder des Datenelements, da er vom aufrufenden Programm verwendet werden soll. Ordinal gibt einen Index in der Exporttabelle im Bereich 1 bis 65.535 an. Wenn Sie keine Ordnungszahl angeben, weist LINK eine zu. Der NONAME-Schlüsselwort (keyword) exportiert die Funktion nur als Ordnungszahl ohne Eintragsname.

Die DATA-Schlüsselwort (keyword) gibt an, dass das exportierte Element ein Datenelement ist. Das Datenelement im Clientprogramm muss mithilfe der externen __declspec(dllimport)deklariert werden.

Es gibt vier Methoden zum Exportieren einer Definition, die in der empfohlenen Reihenfolge der Verwendung aufgeführt sind:

  1. __declspec(dllexport) im Quellcode

  2. Eine EXPORTS-Anweisung in einer DEF-Datei

  3. Eine /EXPORT-Spezifikation in einem LINK-Befehl

  4. Eine Kommentardirektive im Quellcode des Formulars #pragma comment(linker, "/export: definition ").

Alle diese Methoden können im selben Programm verwendet werden. Wenn LINK ein Programm erstellt, das Exporte enthält, wird auch eine Importbibliothek erstellt, es sei denn, eine EXP-Datei wird im Build verwendet.

LINK verwendet verzierte Formen von Bezeichnern. Der Compiler schmückt einen Bezeichner, wenn er die OBJ-Datei erstellt. Wenn der Eintragsname für den Linker in seinem nicht definierten Formular angegeben wird (wie er im Quellcode angezeigt wird), versucht LINK, den Namen zuzuordnen. Wenn eine eindeutige Übereinstimmung nicht gefunden werden kann, gibt LINK eine Fehlermeldung aus. Verwenden Sie das DUMPBIN-Tool , um die dekorierte Namensform eines Bezeichners abzurufen, wenn Sie ihn für den Linker angeben müssen.

Hinweis

Geben Sie nicht die verzierte Form von C-Bezeichnern an, die deklariert oder deklariert __cdecl__stdcallsind.

Wenn Sie einen nicht bewerteten Funktionsnamen exportieren müssen und je nach Buildkonfiguration (z. B. in 32-Bit- oder 64-Bit-Builds) unterschiedliche DEF-Dateien für jede Konfiguration verwenden müssen. (Präprozessorbedingte Direktiven sind in DEF-Dateien nicht zulässig.) Alternativ können Sie eine #pragma comment Direktive vor einer Funktionsdeklaration verwenden, wie hier gezeigt, wo PlainFuncName der nicht bewertete Name ist und _PlainFuncName@4 der versehene Name der Funktion ist:

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

So legen Sie diese Linkeroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).

  2. Klicken Sie auf der Eigenschaftenseite auf Konfigurationseigenschaften>Linker>Befehlszeile.

  3. Geben Sie die Option in das Feld "Zusätzliche Optionen " ein.

So legen Sie diese Linkeroption programmgesteuert fest

Siehe auch

MSVC-Linkerreferenz
MSVC-Linkeroptionen