Robert Shearman : atl: Implement AtlModuleGetClassObject.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jun 12 10:02:22 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: be35acf02ed382a5f4d043e0c4006ee29500b687
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=be35acf02ed382a5f4d043e0c4006ee29500b687

Author: Robert Shearman <rob at codeweavers.com>
Date:   Mon Jun 12 01:34:53 2006 +0100

atl: Implement AtlModuleGetClassObject.

---

 dlls/atl/atl_main.c |   22 +++++++++++++++++++++-
 1 files changed, 21 insertions(+), 1 deletions(-)

diff --git a/dlls/atl/atl_main.c b/dlls/atl/atl_main.c
index 1daff6c..e3aa9f3 100644
--- a/dlls/atl/atl_main.c
+++ b/dlls/atl/atl_main.c
@@ -299,7 +299,27 @@ HRESULT WINAPI AtlUnmarshalPtr(IStream *
 HRESULT WINAPI AtlModuleGetClassObject(_ATL_MODULEW *pm, REFCLSID rclsid,
                                        REFIID riid, LPVOID *ppv)
 {
-    FIXME("%p %p %p %p\n", pm, rclsid, riid, ppv);
+    int i;
+
+    TRACE("%p %s %s %p\n", pm, debugstr_guid(rclsid), debugstr_guid(riid), ppv);
+
+    if (pm == NULL)
+        return E_INVALIDARG;
+
+    for (i = 0; pm->m_pObjMap[i].pclsid != NULL; i++)
+    {
+        if (IsEqualCLSID(pm->m_pObjMap[i].pclsid, rclsid))
+        {
+            _ATL_OBJMAP_ENTRYW *obj = &pm->m_pObjMap[i];
+
+            TRACE("found object %i\n", i);
+            if (obj->pfnGetClassObject)
+                return obj->pfnGetClassObject(obj->pfnCreateInstance, riid, ppv);
+        }
+    }
+
+    WARN("no class object found for %s\n", debugstr_guid(rclsid));
+
     return E_FAIL;
 }
 




More information about the wine-cvs mailing list