CoLoadLibrary() の説明には、LoadLibraryEx() とほとんど同じことを行うと書かれています - プロセスに DLL をロードします。COM クラス作成関数 (CoCreateInstance() と CoGetClassObject()) はどちらも、必要な DLL をプロセスにロードします。
では、そもそもなぜ CoLoadLibrary() が必要で、どのように使用する必要があるのでしょうか?
CoLoadLibrary() の説明には、LoadLibraryEx() とほとんど同じことを行うと書かれています - プロセスに DLL をロードします。COM クラス作成関数 (CoCreateInstance() と CoGetClassObject()) はどちらも、必要な DLL をプロセスにロードします。
では、そもそもなぜ CoLoadLibrary() が必要で、どのように使用する必要があるのでしょうか?
コードを見てください:
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
したがって、次のように呼び出します。
LoadLibraryEx( FileName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH ).
おそらく、このルーチンは下位互換性のために存在するだけであり、おそらくそのルーツは Win16 にあります。
おそらく、独自の regsvr32.exe を作成している場合はどうでしょうか。しかし、代わりに LoadLibraryEx を使用することもできるため、JP の逆アセンブリは私の推測を実際にはサポートしていません。おそらく昔、Microsoft は COM DLL を通常の DLL とは異なる方法 (D-COM?) でロードすることを計画していたので、これは将来の互換性を確保する方法でした。