Quand et pourquoi utiliser CoLoadLibrary?
-
06-07-2019 - |
Question
La description de CoLoadLibrary () indique qu’elle a sensiblement le même effet que LoadLibraryEx () - charge une DLL dans le processus. Les fonctions de création de classes COM, CoCreateInstance () et CoGetClassObject (), chargent également la DLL nécessaire dans le processus.
Dans ce cas, pourquoi CoLoadLibrary () est-il nécessaire et comment doit-il être utilisé?
La solution
Regardez le code:
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
Il suffit donc d'appeler:
LoadLibraryEx( FileName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH ).
Il est probable que la routine existe uniquement pour des raisons de compatibilité ascendante - elle a probablement ses racines dans Win16.
Autres conseils
Peut-être si vous écriviez votre propre regsvr32.exe? Mais le désassemblage de JP ne supporte pas vraiment mon hypothèse, car vous pourriez simplement utiliser LoadLibraryEx à la place. Autrefois, Microsoft prévoyait peut-être que les DLL COM seraient chargées différemment des DLL normales (D-COM?). C’était donc un moyen de garantir la future compatibilité.