Если вы хотите следовать надлежащим соглашениям COM, вам необходимо правильно обработать параметры CoCreateInstance (как описано здесь ).
Параметр __in REFIID riid
является GUID интерфейс , который вы хотите использовать, а не сама DLL.Параметр CLSID - это класс объекта, который вы должны знать заранее.Поскольку вы хотите вернуть ожидаемый интерфейс, вам на самом деле нужно знать только CLSID вашей новой реализации (coclass) и вызывать его с помощью этого.
Более простой, но не совсем COM-spec, метод - экспортфабрика из вашей DLL:
__declspec(dllexport) MyObject * CreateObject()
{
return new MyObject();
}
и вызовите ее из вашей оболочки:
HOOK_CoCreateInstance(rclsid,pUnkOuter,dwClsContext,riid,*ppv)
{
if(myCLSID)
{
module = LoadLibrary(mydll);
dllCreate = (FUNC)GetProcAddress(module,"CreateObject");
*ppv = dllCreate();
return S_OK;
} else {
hr = CoCreateInstanceReal(rclsid,pUnkOuter,dwClsContext,riid,ppv);
return hr;
}
}