EXPORTS
Aggiornamento: novembre 2007
Introduce una sezione di una o più definizioni (definitions) che rappresentano dati o funzioni esportate. Ciascuna definizione deve essere riportata su una riga separata.
EXPORTS
definitions
Note
La parola chiave EXPORTS può trovarsi sulla stessa riga della prima definizione o su una riga precedente. Il file DEF può contenere una o più istruzioni EXPORTS.
La sintassi per le definitions di esportazione è la seguente:
entryname[=internalname] [@ordinal [NONAME]] [PRIVATE] [DATA]
entryname è il nome della funzione o della variabile da esportare. Questa informazione è necessaria. Se il nome utilizzato per l'esportazione è diverso dal quello della DLL, specificare il nome di esportazione nella DLL mediante internalname. Se ad esempio la DLL esporta una funzione, func1(), e si desidera che venga utilizzata come func2(), specificare quanto segue:
EXPORTS
func2=func1
@ordinal consente di specificare che nella tabella di esportazione della DLL verrà inserito un numero e non il nome della funzione. In questo modo la dimensione della DLL verrà ridotta al minimo. Il file LIB conterrà le informazioni di mapping tra il valore ordinale e la funzione, in modo da consentire che il nome della funzione venga utilizzato come nei progetti che fanno uso della DLL.
La parola chiave facoltativa NONAME consente di eseguire l'esportazione solo mediante valori ordinali e di ridurre la dimensione della tabella di esportazione nella DLL risultante. Tuttavia, per utilizzare GetProcAddress sulla DLL, è necessario conoscere il corrispondente valore ordinale, in quanto il nome non sarà ritenuto valido.
Mediante la parola chiave facoltativa PRIVATE si impedisce l'inserimento di entryname nella libreria di importazione generata da LINK. Essa non produce alcun effetto sull'esportazione nell'immagine generata da LINK.
Mediante la parola chiave facoltativa DATA si specifica che un'esportazione è costituita da dati e non codice. È ad esempio possibile esportare una variabile costituita da dati come segue:
EXPORTS
i DATA
Quando si utilizzano PRIVATE e DATA per la stessa esportazione, PRIVATE deve precedere DATA.
Sono disponibili tre metodi per l'esportazione di una definizione, elencati di seguito nell'ordine in cui se ne consiglia l'utilizzo:
Parola chiave __declspec(dllexport) nel codice sorgente
Istruzione EXPORTS in un file DEF
Specifica /EXPORT in un comando LINK
Tutti e tre i metodi possono essere utilizzati nello stesso programma. Quando si genera mediante LINK un programma che contiene esportazioni, si crea anche una libreria di importazioni, a meno che nella generazione non venga utilizzato un file EXP.
Di seguito è riportato un esempio di sezione EXPORTS:
EXPORTS
DllCanUnloadNow @1 PRIVATE DATA
DllWindowName = Name DATA
DllGetClassObject @4 NONAME PRIVATE
DllRegisterServer @7
DllUnregisterServer
Quando si esporta una variabile da una DLL con un file DEF, non è necessario specificare __declspec(dllexport) nella variabile. Nei file che utilizzano la DLL tale specifica è invece necessaria per la dichiarazione dei dati.