CoLoadLibrary()的說明表明它與LoadLibraryEx()幾乎相同 - 將DLL加載到進程中。 COM類創建函數 - CoCreateInstance()和CoGetClassObject() - 都將必要的DLL加載到過程中。什麼時候和爲什麼使用CoLoadLibrary?
那麼爲什麼CoLoadLibrary()首先需要它,應該如何使用?
CoLoadLibrary()的說明表明它與LoadLibraryEx()幾乎相同 - 將DLL加載到進程中。 COM類創建函數 - CoCreateInstance()和CoGetClassObject() - 都將必要的DLL加載到過程中。什麼時候和爲什麼使用CoLoadLibrary?
那麼爲什麼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?但JP的反彙編並不能真正支持我的猜測,因爲您可以改用LoadLibraryEx。也許在過去的日子裏,微軟計劃在某一天以不同於常規DLL(D-COM?)的方式加載COM DLL,所以這是確保兼容性的一種方式。
當我需要調用它時,是否有任何場景? – sharptooth 2009-05-06 08:29:26