我已經掛鉤了cocreateinstance()函數。 當用特定的CLSID調用它時,我想用我的dll代替dll系統。com:使用未註冊的dll
因此,這裏是我的代碼:
HOOK_CoCreateInstance(rclsid,pUnkOuter,dwClsContext,riid,*ppv){
...
if(myCLSID){
module = LoadLibrary(mydll);
dllGetClassObject = (FUNC)GetProcAddress(module,"DllGetClassObject");
hr = dllGetClassObject(rclsid, IID_IClassFactory, &pClassFactory);
hr = pClassFactory->CreateInstance(NULL,IID_IUnknown, (void**)&data_source);
return hr;
}
else{
hr = CoCreateInstanceReal(rclsid,pUnkOuter,dwClsContext,riid,ppv);
return hr;
}
}
但它不工作。
我認爲問題出在pClassFactory :: CreateInstance()中,第二個參數是: 我不知道如何自動檢索我的dll的REFIID。 如果我使用riid它也不工作。
所以如果有人有一個想法, 謝謝!
什麼工作不準確如果你使用'riid'? – sharptooth
如果我使用riid,我的dll會被加載,但是系統dll也會被加載。 – Chicago
什麼時候系統DLL加載? – sharptooth