2009-08-27 10 views
7

Sto parlando di win32 dlls, quei semplici file pe. Sono confuso dopo aver fatto un test rispetto a quello che ho visto nel processo explorer.exe.Potremmo avere 2 DLL con lo stesso nome da caricare in un unico processo

  1. ho scritto un test con i seguenti moduli: (C++)
    collegamenti dllloader.exe a A.dll nella stessa cartella.
    B.dll link a A.dll (2) in un'altra cartella. (A.dll (2) è una DLL completamente diversa da A.dll, ma con lo stesso nome)
    DLLLoader.exe caricherà B.dll esplicitamente attraverso :: LoadLibrary.
    Ora avvio DllLoader.exe, in primo luogo, verrà caricato A.dll, ma quando si tenta di caricare B.dll, non è riuscito: sospetto che sia perché B.dll pensa che A.dll sia già caricato nel processo , ma in realtà, quello caricato non è quello voluto da B.dll, la tabella di importazione/esportazione non può corrispondere, quindi non è stato possibile caricare B.dll.
    Questo sembra dirci che non possiamo caricare 2 DLL con lo stesso nome nello stesso processo, anche se sono di percorso diverso.

  2. Ma quando ho usato Process Explorer per monitorare moduli caricati nel processo explorer.exe di Windows ho potuto vedere dopo 2 DLL corso di caricamento, con lo stesso nome:
    comctl32.dll User Experience Controlli libreria C: \ WINDOWS \ WinSxS ... \ comctl32.dll
    comctl32.dll Controlli comuni Biblioteca C: \ WINDOWS \ system32 \ comctl32.dll

Potrebbe qualcuno di voi gettare qualche luce su questo?

risposta

6

Dipende essenzialmente se si carica la DLL con il percorso completo o solo per nome file. I LoadLibraryEx documenti coprono questo abbastanza bene:

Se lpFileName non include un percorso e non v'è più di una carica modulo con lo stesso nome di base e estensione, la funzione restituisce un handle al modulo che è stato caricato prima .

+0

Per quanto riguarda il caricamento impilict (basato sulla dipendenza DLL), è possibile caricare solo 1 dll con lo stesso nome. –

Problemi correlati