Importazione ed esportazione
È possibile importare simboli pubblici in un'applicazione o esportare funzioni da una DLL usando due metodi:
Usare un file di definizione del modulo (con estensione def) durante la compilazione della DLL
Usare le parole chiave
__declspec(dllimport)
o__declspec(dllexport)
in una definizione di funzione nell'applicazione principale
Uso di un file con estensione def
Un file module-definition (con estensione def) è un file di testo contenente una o più istruzioni module che descrivono vari attributi di una DLL. Se non si usano __declspec(dllimport)
o __declspec(dllexport)
per esportare le funzioni di una DLL, la DLL richiede un file con estensione def.
È possibile usare i file con estensione def per importare in un'applicazione o per esportare da una DLL.
Uso di __declspec
Non è necessario usare __declspec(dllimport)
per la compilazione corretta del codice, ma in questo modo il compilatore può generare codice migliore. Il compilatore è in grado di generare codice migliore perché può determinare se una funzione esiste in una DLL o meno, che consente al compilatore di produrre codice che ignora un livello di riferimento indiretto che normalmente sarebbe presente in una chiamata di funzione che superava un limite di DLL. Tuttavia, è necessario usare __declspec(dllimport)
per importare le variabili usate in una DLL.
Con la sezione EXPORT del file con estensione def appropriata, __declspec(dllexport)
non è necessario. __declspec(dllexport)
è stato aggiunto per fornire un modo semplice per esportare le funzioni da un file .exe o .dll senza usare un file con estensione def.
Il formato Eseguibile portabile Win32 è progettato per ridurre al minimo il numero di pagine che devono essere toccate per correggere le importazioni. A tale scopo, inserisce tutti gli indirizzi di importazione per qualsiasi programma in un'unica posizione denominata Tabella indirizzi di importazione. In questo modo il caricatore può modificare solo una o due pagine durante l'accesso a queste importazioni.