Udostępnij za pośrednictwem


Eksportowanie z biblioteki DLL przy użyciu opcję __declspec(dllexport)

Wprowadzone Microsoft __export w wersji 16-bitowy kompilator Visual C++, aby umożliwić kompilator automatycznie Generuj nazwy wywozu i umieścić je w pliku .lib.Ten plik .lib następnie można podobnie jak statyczne .lib łącza z biblioteki DLL.

W nowszych wersjach kompilatora, można wyeksportować dane, funkcje, klasy lub klasy funkcji elementów członkowskich z biblioteki DLL przy użyciu opcję __declspec(dllexport) słowa kluczowego.opcję __declspec(dllexport) dodaje dyrektywy eksportu do pliku obiektu, więc nie trzeba użyć pliku .def.

Podczas próby eksportu zdobione nazwy funkcji C++ najbardziej widoczne jest to wygodne.Ponieważ nie istnieje specyfikacja standardowych dekoracji nazwa, nazwy eksportowanych funkcji może się zmieniać wersje kompilatora.Jeśli używasz opcję __declspec(dllexport), ponownej kompilacji DLL i plików exe zależnych jest niezbędne tylko do konta do zmiany konwencji nazewnictwa.

Wiele wyeksportować dyrektyw, takie jak liczby porządkowe, bez nazwy i prywatnych, jest możliwe tylko w pliku .def i jest sposobem określania tych atrybutów bez pliku .def.Jednakże, za pomocą opcję __declspec(dllexport) oprócz .def pliku nie powoduje błędy kompilacji.

Aby wyeksportować funkcji, opcję __declspec(dllexport) słowo kluczowe musi pojawiają się po lewej stronie słowa kluczowego konwencji wywołania, jeśli określono słowa kluczowego.Na przykład:

__declspec(dllexport) void __cdecl Function1(void);

Aby wyeksportować wszystkie dane publicznych członków i funkcji elementów członkowskich w klasie, słowo kluczowe muszą znajdować się na lewo od nazwy klasy w następujący sposób:

class __declspec(dllexport) CExampleExport : public CObject
{ ... class definition ... };

[!UWAGA]

__declspec(dllexport)nie można zastosować funkcji __clrcall konwencji wywoływania.

Konstruując biblioteki DLL, zazwyczaj tworzony plik nagłówka, który zawiera prototypy funkcji lub klasy, eksportowania i dodać opcję __declspec(dllexport) do deklaracji w pliku nagłówkowym.Aby zwiększyć czytelność kodu, należy zdefiniować makro dla opcję __declspec(dllexport) i użyć makra z każdego symbolu są eksportowane:

#define DllExport   __declspec( dllexport ) 

opcję __declspec(dllexport) sklepy działać nazwy w tabeli eksportu biblioteki DLL.Jeśli chcesz zoptymalizować rozmiar tabeli, zobacz Eksportowania funkcji DLL, liczba porządkowa raczej niż nazwa.

[!UWAGA]

Podczas przenoszenia kodu źródłowego DLL z Win16 do Win32, należy zastąpić każde wystąpienie __export z opcję __declspec(dllexport).

Jako odniesienie wyszukiwanie pliku nagłówkowym Win32 Winbase.h.Zawiera przykłady __declspec(dllimport) sposób użycia.

Co chcesz zrobić?

Co chcesz wiedzieć więcej?

Zobacz też

Koncepcje

Eksportowanie z biblioteki DLL