Esportazione da una DLL tramite __declspec(dllexport)
È possibile esportare dati, funzioni, classi o funzioni membro di classe da una DLL usando la __declspec(dllexport)
parola chiave . __declspec(dllexport)
aggiunge la direttiva export al file oggetto in modo da non dover usare un file con estensione def.
Questa praticità è più evidente quando si tenta di esportare nomi di funzione C++ decorati. Poiché non esiste alcuna specifica standard per la decorazione del nome, il nome di una funzione esportata potrebbe cambiare tra le versioni del compilatore. Se si usa __declspec(dllexport)
, ricompilare la DLL e i file di .exe dipendenti è necessario solo per tenere conto di eventuali modifiche alle convenzioni di denominazione.
Molte direttive di esportazione, ad esempio ordinali, NONAME e PRIVATE, possono essere effettuate solo in un file con estensione def e non è possibile specificare questi attributi senza un file def. Tuttavia, l'uso di oltre all'uso __declspec(dllexport)
di un file con estensione def non causa errori di compilazione.
Per esportare le funzioni, la __declspec(dllexport)
parola chiave deve essere visualizzata a sinistra della parola chiave calling-convention, se viene specificata una parola chiave. Ad esempio:
__declspec(dllexport) void __cdecl Function1(void);
Per esportare tutti i membri dati pubblici e le funzioni membro in una classe, la parola chiave deve essere visualizzata a sinistra del nome della classe come indicato di seguito:
class __declspec(dllexport) CExampleExport : public CObject
{ ... class definition ... };
Nota
__declspec(dllexport)
non può essere applicato a una funzione con la convenzione di __clrcall
chiamata.
Quando si compila la DLL, in genere si crea un file di intestazione contenente i prototipi di funzione e/o le classi da esportare e aggiungere __declspec(dllexport)
alle dichiarazioni nel file di intestazione. Per rendere il codice più leggibile, definire una macro per __declspec(dllexport)
e usare la macro con ogni simbolo esportato:
#define DllExport __declspec( dllexport )
__declspec(dllexport)
archivia i nomi delle funzioni nella tabella di esportazione della DLL. Per ottimizzare le dimensioni della tabella, vedere Esportazione di funzioni da una DLL per ordinale anziché per nome.
Cosa vuoi fare?
Esportare le funzioni C++ per l'uso nei file eseguibili in linguaggio C
Esportare le funzioni C da usare nei file eseguibili in linguaggio C o C++