Rob Shearman : atl:
AtlModuleGetClassObject should store an intermediate pointer in obj->
pCF and then query this for the requested interface.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Apr 25 07:06:35 CDT 2007
Module: wine
Branch: master
Commit: 72ddcb5f362748c040dc902bb5c1c75760c675b1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=72ddcb5f362748c040dc902bb5c1c75760c675b1
Author: Rob Shearman <rob at codeweavers.com>
Date: Wed Apr 25 11:21:48 2007 +0100
atl: AtlModuleGetClassObject should store an intermediate pointer in obj->pCF and then query this for the requested interface.
Return CLASS_E_CLASSNOTAVAILABLE instead of E_FAIL.
---
dlls/atl/atl_main.c | 13 +++++++++++--
1 files changed, 11 insertions(+), 2 deletions(-)
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(_ATL_MODULEW *pm, REFCLSID rclsid,
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(_ATL_MODULEW *pm, REFCLSID rclsid,
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-cvs
mailing list