Quando e perché usare CoLoadLibrary?
-
06-07-2019 - |
Domanda
La descrizione di CoLoadLibrary () dice che fa praticamente lo stesso di LoadLibraryEx () - carica una DLL nel processo. Le funzioni di creazione delle classi COM - CoCreateInstance () e CoGetClassObject () - caricano entrambe anche la DLL necessaria nel processo.
Allora perché è necessario CoLoadLibrary () in primo luogo e come dovrebbe essere usato?
Soluzione
Dai un'occhiata al codice:
mov edi,edi
push ebp
mov ebp,esp
push 8
push 0
push dword ptr [ebp+8]
call dword ptr [ole32!_imp__LoadLibraryExW (71eb1214)]
pop ebp
ret 8
Quindi chiama semplicemente:
LoadLibraryEx( FileName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH ).
Presumibilmente, la routine esiste solo per compatibilità con le versioni precedenti - probabilmente ha le sue radici in Win16.
Altri suggerimenti
Forse se stessi scrivendo il tuo regsvr32.exe? Ma il disassemblaggio di JP non supporta davvero la mia ipotesi, perché potresti usare LoadLibraryEx invece. Forse ai vecchi tempi, Microsoft pianificava che un giorno le DLL COM sarebbero state caricate in modo diverso rispetto alle normali DLL (D-COM?), Quindi questo era un modo per garantire la futura compatibilità.