LoadLibrary e AfxLoadLibrary
Aggiornamento: novembre 2007
I processi chiamano LoadLibrary o AfxLoadLibrary per collegarsi in modo esplicito a una DLL. Se eseguita correttamente, la funzione associa la DLL specificata allo spazio degli indirizzi del processo chiamante e restituisce un handle alla DLL che può essere utilizzato con altre funzioni impiegate nel collegamento esplicito, come GetProcAddress e FreeLibrary.
LoadLibrary tenta di individuare la DLL utilizzando la stessa sequenza di ricerca impiegata nel collegamento implicito. Se il sistema non è in grado di trovare la DLL o se la funzione di punto di ingresso restituisce il valore FALSE, LoadLibrary restituisce NULL. Se la chiamata a LoadLibrary specifica un modulo di DLL già associato allo spazio degli indirizzi del processo chiamante, la funzione restituisce semplicemente un handle della DLL e incrementa il conteggio dei riferimenti del modulo.
Se la DLL ha una funzione di punto di ingresso, il sistema operativo chiama la funzione nel contesto del thread che ha chiamato LoadLibrary. La funzione di punto di ingresso non è chiamata se la DLL è già connessa al processo a causa di una chiamata precedente a LoadLibrary senza chiamata corrispondente alla funzione FreeLibrary.
Le applicazioni MFC che caricano DLL di estensione devono utilizzare AfxLoadLibrary anziché LoadLibrary. AfxLoadLibrary, infatti, prima di chiamare LoadLibrary gestisce la sincronizzazione dei thread. L'interfaccia, ovvero il prototipo della funzione, per AfxLoadLibrary è la stessa di LoadLibrary.
Se per un motivo qualsiasi è impossibile caricare la DLL, il processo può tentare la correzione dell'errore. Il processo può, ad esempio, notificare l'errore all'utente e richiedere che venga specificato un percorso diverso per la DLL.
Nota sulla sicurezza: |
---|
Se il codice deve essere eseguito in Windows NT 4, Windows 2000 o Windows XP (versione precedente alla SP1), accertarsi di specificare il percorso completo delle DLL. In questi sistemi operativi, al momento del caricamento dei file viene prima effettuata una ricerca nella directory corrente. Se non si specifica il percorso del file, è possibile che non venga caricato il file desiderato. |