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.

Cosa vuoi fare?

Vedi anche

Creare DLL C/C++ in Visual Studio