Condividi tramite


Esportazione da una DLL tramite __declspec(dllexport)

Nella versione a 16 bit del compilatore di Microsoft Visual C++ è stata introdotta la parola chiave __export per consentire la generazione automatica dei nomi di esportazione e il relativo posizionamento in un file lib,che può quindi essere utilizzato come un normale file lib statico per il collegamento a una DLL.

Nelle versioni più recenti del compilatore è possibile esportare dati, funzioni, classi o funzioni membro delle classi da una DLL mediante la parola chiave __declspec(dllexport),che aggiunge la direttiva di esportazione al file oggetto per evitare di dover utilizzare un file def.

L'utilità di questa parola chiave è evidente quando si tenta di esportare i nomi decorati di funzioni C++.Dato che non esiste alcuna specifica standard per la decorazione dei nomi, il nome di una funzione esportata può variare tra le diverse versioni del compilatore.Se si utilizza __declspec(dllexport), la ricompilazione della DLL e dei file exe dipendenti è necessaria solo per tenere conto di eventuali modifiche delle convenzioni di denominazione.

Molte direttive di esportazione, come i numeri ordinali, NONAME e PRIVATE, possono essere definite solo in un file def e non è possibile specificare questi attributi senza un file def.L'utilizzo di __declspec(dllexport) insieme a un file def, tuttavia, non causa errori di compilazione.

Per esportare le funzioni, la parola chiave __declspec(dllexport) deve comparire a sinistra della parola chiave della convenzione di chiamata, se specificata.Di seguito è riportato un esempio:

__declspec(dllexport) void __cdecl Function1(void);

Per esportare tutte le funzioni membro e i membri dati pubblici di una classe, la parola chiave deve comparire a sinistra del nome della classe come indicato di seguito:

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

[!NOTA]

Impossibile applicare __declspec(dllexport) a una funzione con la convenzione di chiamata __clrcall.

Quando si compila la DLL, in genere viene creato un file di intestazione contenente i prototipi di funzione e/o le classi esportate e viene aggiunta la parola chiave __declspec(dllexport) alle dichiarazioni nel file di intestazione.Per rendere il codice più leggibile, definire una macro per __declspec(dllexport), quindi utilizzarla con ciascun simbolo da esportare:

#define DllExport   __declspec( dllexport ) 

__declspec(dllexport) memorizza i nomi di funzione nella tabella di esportazione della DLL.Per ottimizzare le dimensioni della tabella, vedere Esportazione di funzioni da una DLL in base al numero ordinale anziché al nome.

[!NOTA]

Quando si esegue il porting del codice sorgente della DLL da Win16 a Win32, sostituire ogni istanza di __export con __declspec(dllexport).

Come riferimento, esaminare il file di intestazione Winbase.h di Win32,che contiene esempi di utilizzo di __declspec(dllimport).

Scegliere l'argomento con cui si desidera procedere

Scegliere l'argomento su cui visualizzare maggiori informazioni

Vedere anche

Concetti

Esportazione da una DLL