Udostępnij za pośrednictwem


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

Za pomocą słowa kluczowego __declspec(dllexport) można eksportować dane, funkcje, klasy lub funkcje składowe klasy z biblioteki DLL. __declspec(dllexport) Dodaje dyrektywę eksportu do pliku obiektu, aby nie trzeba było używać pliku def.

Ta wygoda jest najbardziej widoczna podczas próby wyeksportowania ozdobionych nazw funkcji języka C++. Ponieważ nie ma standardowej specyfikacji dekoracji nazw, nazwa wyeksportowanej funkcji może ulec zmianie między wersjami kompilatora. Jeśli używasz metody __declspec(dllexport), ponowne kompilowanie bibliotek DLL i plików zależnych .exe jest konieczne tylko do uwzględnienia wszelkich zmian konwencji nazewnictwa.

Wiele dyrektyw eksportu, takich jak ordinals, NONAME i PRIVATE, można wykonać tylko w pliku def i nie ma możliwości określenia tych atrybutów bez pliku def. Jednak użycie __declspec(dllexport) oprócz używania pliku .def nie powoduje błędów kompilacji.

Aby wyeksportować funkcje, __declspec(dllexport) słowo kluczowe musi pojawić się po lewej stronie słowa kluczowego konwencji wywołującej, jeśli zostanie określone słowo kluczowe. Na przykład:

__declspec(dllexport) void __cdecl Function1(void);

Aby wyeksportować wszystkie publiczne składowe danych i funkcje składowe w klasie, słowo kluczowe musi pojawić się po lewej stronie nazwy klasy w następujący sposób:

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

Uwaga

__declspec(dllexport) nie można zastosować do funkcji z konwencją __clrcall wywoływania.

Podczas tworzenia biblioteki DLL zazwyczaj tworzy się plik nagłówkowy zawierający prototypy funkcji i/lub klasy eksportowane i dodawane __declspec(dllexport) do deklaracji w pliku nagłówkowym. Aby kod był bardziej czytelny, zdefiniuj makro i __declspec(dllexport) użyj makra z każdym eksportowanym symbolem:

#define DllExport   __declspec( dllexport )

__declspec(dllexport) przechowuje nazwy funkcji w tabeli eksportu biblioteki DLL. Jeśli chcesz zoptymalizować rozmiar tabeli, zobacz Eksportowanie funkcji z biblioteki DLL według porządkowych, a nie według nazwy.

Co chcesz zrobić?

Co chcesz dowiedzieć się więcej?

Zobacz też

Eksportowanie z biblioteki DLL