Condividi tramite


Creazione della libreria a collegamento dinamico

Per creare una libreria a collegamento dinamico (DLL), è necessario creare uno o più file di codice sorgente ed eventualmente un file del linker per l'esportazione delle funzioni. Se si prevede di consentire alle applicazioni che usano la DLL di usare il collegamento dinamico in fase di caricamento, è necessario creare anche una libreria di importazione.

Creazione di file di origine

I file di origine per una DLL contengono funzioni e dati esportati, funzioni interne e dati e una funzione di punto di ingresso facoltativa per la DLL. È possibile usare qualsiasi strumento di sviluppo che supporti la creazione di DLL basate su Windows.

Se la DLL può essere usata da un'applicazione multithreading, è necessario rendere la DLL "thread-safe". Per evitare il danneggiamento dei dati, è necessario sincronizzare l'accesso a tutti i dati globali della DLL. È anche necessario assicurarsi di collegare solo le librerie thread-safe. Ad esempio, Microsoft Visual C++ contiene più versioni della libreria di runtime C, una non thread-safe e due.

Esportazione di funzioni

Il modo in cui si specificano le funzioni in una DLL da esportare dipende dagli strumenti usati per lo sviluppo. Alcuni compilatori consentono di esportare una funzione direttamente nel codice sorgente usando un modificatore nella dichiarazione di funzione. In altri casi, è necessario specificare le esportazioni in un file passato al linker.

Ad esempio, usando Visual C++, esistono due modi possibili per esportare funzioni DLL: con il modificatore __declspec(dllexport) o con un file di definizione del modulo (.def). Se si usa il modificatore __declspec(dllexport), non è necessario usare un .def file. Per altre info, vedi Esportazione da una DLL.

Creazione di una libreria di importazione

Un file di libreria di importazione (.lib) contiene informazioni necessarie al linker per risolvere i riferimenti esterni alle funzioni DLL esportate, in modo che il sistema possa individuare la DLL specificata e le funzioni DLL esportate in fase di esecuzione. È possibile creare una libreria di importazione per la DLL quando si compila la DLL.

Per altre informazioni, vedi Compilazione di una libreria di importazione ed esportazione di file.

Uso di una libreria di importazione

Ad esempio, per chiamare la funzione CreateWindow , è necessario collegare il codice alla libreria User32.libdi importazione . Il motivo è che CreateWindow risiede in una DLL di sistema denominata User32.dlled User32.lib è la libreria di importazione usata per risolvere le chiamate nel codice per le funzioni esportate in User32.dll. Il linker crea una tabella contenente l'indirizzo di ogni chiamata di funzione. Le chiamate alle funzioni in una DLL verranno risolte al caricamento della DLL. Mentre il sistema inizializza il processo, viene caricato User32.dll perché il processo dipende dalle funzioni esportate in tale DLL e aggiorna le voci nella tabella degli indirizzi della funzione. Tutte le chiamate a CreateWindow richiamano la funzione esportata da User32.dll.

Per altre info, vedi Collegare un eseguibile a una DLL.