atl: AtlModuleGetClassObject should store an intermediate pointer
in obj->pCF and then query this for the requested interface.
Robert Shearman
rob at codeweavers.com
Wed Apr 25 05:21:48 CDT 2007
Return CLASS_E_CLASSNOTAVAILABLE instead of E_FAIL.
---
dlls/atl/atl_main.c | 13 +++++++++++--
1 files changed, 11 insertions(+), 2 deletions(-)
-------------- next part --------------
diff --git a/dlls/atl/atl_main.c b/dlls/atl/atl_main.c
index a25f747..3b5703e 100644
--- a/dlls/atl/atl_main.c
+++ b/dlls/atl/atl_main.c
@@ -340,6 +340,7 @@ HRESULT WINAPI AtlModuleGetClassObject(_
REFIID riid, LPVOID *ppv)
{
int i;
+ HRESULT hres = CLASS_E_CLASSNOTAVAILABLE;
TRACE("%p %s %s %p\n", pm, debugstr_guid(rclsid), debugstr_guid(riid), ppv);
@@ -354,13 +355,21 @@ HRESULT WINAPI AtlModuleGetClassObject(_
TRACE("found object %i\n", i);
if (obj->pfnGetClassObject)
- return obj->pfnGetClassObject(obj->pfnCreateInstance, riid, ppv);
+ {
+ if (!obj->pCF)
+ hres = obj->pfnGetClassObject(obj->pfnCreateInstance,
+ &IID_IUnknown,
+ (void **)&obj->pCF);
+ if (obj->pCF)
+ hres = IUnknown_QueryInterface(obj->pCF, riid, ppv);
+ break;
+ }
}
}
WARN("no class object found for %s\n", debugstr_guid(rclsid));
- return E_FAIL;
+ return hres;
}
/***********************************************************************
More information about the wine-patches
mailing list