STDAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, LPVOID* ppv ) { UINT i; HRESULT hres = E_OUTOFMEMORY; IClassFactory * pcf = NULL; if (!ppv) return E_INVALIDARG; *ppv = NULL; for (i = 0; InterfaceTable[i].riid; i++) { if (IsEqualIID(InterfaceTable[i].riid, rclsid)) { pcf = IClassFactory_fnConstructor(InterfaceTable[i].lpfnCI, NULL, NULL); break; } } if (!pcf) { return CLASS_E_CLASSNOTAVAILABLE; } hres = IClassFactory_QueryInterface(pcf, riid, ppv); IClassFactory_Release(pcf); return hres; }
HRESULT WINAPI DllGetClassObject( REFCLSID rclsid, REFIID riid, LPVOID* ppv) { LPOLESTR pStr, pStr2; UINT i; HRESULT hres = E_OUTOFMEMORY; IClassFactory * pcf = NULL; if (!ppv) return E_INVALIDARG; *ppv = NULL; for (i = 0; InterfaceTable[i].riid; i++) { if (IsEqualIID(InterfaceTable[i].riid, rclsid)) { pcf = IClassFactory_fnConstructor(InterfaceTable[i].lpfnCI, NULL, NULL); break; } } if (!pcf) { StringFromIID(rclsid, &pStr); StringFromIID(riid, &pStr2); DPRINT("No Class Available for %ws IID %ws\n", pStr, pStr2); CoTaskMemFree(pStr); CoTaskMemFree(pStr2); //ASSERT(0); return CLASS_E_CLASSNOTAVAILABLE; } hres = IClassFactory_QueryInterface(pcf, riid, ppv); IClassFactory_Release(pcf); return hres; }