Importazione ed esportazione
È possibile importare simboli pubblici in un'applicazione o esportare funzioni da una DLL mediante i due metodi elencati di seguito.
Utilizzare un file di definizione di modulo (def) quando si compila la DLL.
Utilizzare le parole chiave __declspec(dllimport) o __declspec(dllexport) in una definizione di funzione nell'applicazione principale.
Utilizzo di un file def
Un file di definizione di modulo (def) è un file di testo contenente una o più istruzioni di modulo che descrivono alcuni attributi di una DLL. Se non si utilizzano le parole chiave __declspec(dllimport) o __declspec(dllexport) per esportare le funzioni di una DLL, è necessario utilizzare un file def.
È possibile utilizzare i file def per l'importazione in un'applicazione o l'esportazione da una DLL.
Utilizzo di __declspec
Visual C++ utilizza __declspec(dllimport) e __declspec(dllexport) per sostituire la parola chiave __export utilizzata in precedenza nelle versioni a 16 bit di Visual C++.
L'utilizzo di __declspec(dllimport) non è richiesto per la compilazione corretta del codice, ma consente al compilatore di generare codice più efficiente. Il compilatore, infatti, può determinare se una funzione è presente o meno in una DLL e può quindi produrre un codice che evita un livello di riferimento indiretto normalmente presente in una chiamata di funzione che attraversa un limite di DLL. È tuttavia necessario utilizzare __declspec(dllimport) per importare le variabili utilizzate in una DLL.
Con la sezione EXPORTS del file def appropriato, la parola chiave __declspec(dllexport) non è necessaria. __declspec(dllexport) è stata aggiunta per semplificare l'esportazione delle funzioni da un file exe o dll senza l'utilizzo di un file def.
Il formato eseguibile portabile Win32 consente di ridurre al minimo il numero di pagine da modificare per correggere i problemi di importazione. A questo scopo, tutti gli indirizzi di importazione di un qualsiasi programma vengono inseriti in un'unica posizione, denominata tabella di indirizzi di importazione. Il caricatore può pertanto modificare solo una o due pagine quando accede a queste importazioni.