/EXPORT (Eksportuje funkcję)
Eksportuje funkcję według nazwy lub porządkowych lub danych z programu.
Składnia
/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]
Uwagi
/EXPORT opcja określa funkcję lub element danych do wyeksportowania z programu, aby inne programy mogły wywołać funkcję lub użyć danych. Eksporty są zwykle definiowane w dll.
Entryname to nazwa funkcji lub elementu danych, który ma być używany przez program wywołujący. Porządkowy określa indeks do tabeli eksportów w zakresie od 1 do 65 535; jeśli nie określisz porządkowych, link przypisuje jeden. Słowo kluczowe NONAME eksportuje funkcję tylko jako porządkową bez nazwy wpisu.
Słowo kluczowe DATA określa, że wyeksportowany element jest elementem danych. Element danych w programie klienckim musi być zadeklarowany przy użyciu extern __declspec(dllimport).
Istnieją cztery metody eksportowania definicji wymienione w zalecanej kolejności użycia:
__declspec(dllexport) w kodzie źródłowym
Instrukcja EXPORT w pliku def
/EXPORT specyfikacji w poleceniu LINK
Dyrektywa komentarza w kodzie źródłowym formularza
#pragma comment(linker, "/export: definition ")
.
Wszystkie te metody mogą być używane w tym samym programie. Gdy link kompiluje program zawierający eksporty, tworzy również bibliotekę importu, chyba że w kompilacji jest używany plik exp.
LINK używa ozdobionych formularzy identyfikatorów. Kompilator dekoruje identyfikator podczas tworzenia pliku .obj. Jeśli parametr entryname jest określony do konsolidatora w nieukodowanym formularzu (jak pokazano w kodzie źródłowym), link próbuje dopasować nazwę. Jeśli nie można odnaleźć unikatowego dopasowania, link wysyła komunikat o błędzie. Użyj narzędzia DUMPBIN, aby uzyskać ozdobioną formę nazwy identyfikatora, gdy trzeba go określić w konsolidatorze.
Uwaga
Nie należy określać ozdobionej formy identyfikatorów języka C, które są zadeklarowane __cdecl
lub __stdcall
.
Jeśli musisz wyeksportować nieukodowaną nazwę funkcji i mieć różne eksporty w zależności od konfiguracji kompilacji (na przykład w kompilacjach 32-bitowych lub 64-bitowych), możesz użyć różnych plików DEF dla każdej konfiguracji. (Dyrektywy warunkowe preprocesora nie są dozwolone w plikach DEF). Alternatywnie można użyć #pragma comment
dyrektywy przed deklaracją funkcji, jak pokazano tutaj, gdzie PlainFuncName
jest nieukodowaną nazwą i _PlainFuncName@4
jest nazwą ozdobioną funkcji:
#pragma comment(linker, "/export:PlainFuncName=_PlainFuncName@4")
BOOL CALLBACK PlainFuncName( Things * lpParams)
Aby ustawić tę opcję konsolidatora w środowisku programowania Visual Studio
Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać szczegółowe informacje, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilowania w programie Visual Studio).
Wybierz stronę właściwości wiersza polecenia konsolidatora>konfiguracji.>
Wprowadź opcję w polu Dodatkowe opcje .
Aby programowo ustawić tę opcję konsolidatora
- Zobacz: AdditionalOptions.