Jacek Caban : atl100: Added AtlComModuleRegisterClassObjects implementation ( based on AtlModuleRegisterClassObjects).

Alexandre Julliard julliard at winehq.org
Fri Feb 8 14:13:45 CST 2013


Module: wine
Branch: master
Commit: 68a4c30e8b702e425ea099061dd3e8510e2a7f60
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=68a4c30e8b702e425ea099061dd3e8510e2a7f60

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Feb  8 10:59:19 2013 +0100

atl100: Added AtlComModuleRegisterClassObjects implementation (based on AtlModuleRegisterClassObjects).

---

 dlls/atl100/atl.c       |   32 ++++++++++++++++++++++++++++++++
 dlls/atl100/atl100.spec |    2 +-
 dlls/atl80/atl80.spec   |    2 +-
 include/atlbase.h       |    1 +
 4 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/dlls/atl100/atl.c b/dlls/atl100/atl.c
index ce35b38..ebb47a1 100644
--- a/dlls/atl100/atl.c
+++ b/dlls/atl100/atl.c
@@ -456,6 +456,38 @@ HRESULT WINAPI AtlComModuleGetClassObject(_ATL_COM_MODULE *pm, REFCLSID rclsid,
 }
 
 /***********************************************************************
+ *           AtlComModuleRegisterClassObjects   [atl100.17]
+ */
+HRESULT WINAPI AtlComModuleRegisterClassObjects(_ATL_COM_MODULE *module, DWORD context, DWORD flags)
+{
+    _ATL_OBJMAP_ENTRY **iter;
+    IUnknown *unk;
+    HRESULT hres;
+
+    TRACE("(%p %x %x)\n", module, context, flags);
+
+    if(!module)
+        return E_INVALIDARG;
+
+    for(iter = module->m_ppAutoObjMapFirst; iter < module->m_ppAutoObjMapLast; iter++) {
+        if(!(*iter)->pfnGetClassObject)
+            continue;
+
+        hres = (*iter)->pfnGetClassObject((*iter)->pfnCreateInstance, &IID_IUnknown, (void**)&unk);
+        if(FAILED(hres))
+            return hres;
+
+        hres = CoRegisterClassObject((*iter)->pclsid, unk, context, flags, &(*iter)->dwRegister);
+        IUnknown_Release(unk);
+        if(FAILED(hres))
+            return hres;
+    }
+
+   return S_OK;
+
+}
+
+/***********************************************************************
  *           AtlComModuleUnregisterServer       [atl100.22]
  */
 HRESULT WINAPI AtlComModuleUnregisterServer(_ATL_COM_MODULE *mod, BOOL bRegTypeLib, const CLSID *clsid)
diff --git a/dlls/atl100/atl100.spec b/dlls/atl100/atl100.spec
index c959a29..fa5d251 100644
--- a/dlls/atl100/atl100.spec
+++ b/dlls/atl100/atl100.spec
@@ -4,7 +4,7 @@
 13 stdcall AtlMarshalPtrInProc(ptr ptr ptr)
 14 stdcall AtlUnmarshalPtr(ptr ptr ptr)
 15 stdcall AtlComModuleGetClassObject(ptr ptr ptr ptr)
-17 stub AtlComModuleRegisterClassObjects
+17 stdcall AtlComModuleRegisterClassObjects(ptr long long)
 20 stub AtlComModuleRevokeClassObjects
 22 stdcall AtlComModuleUnregisterServer(ptr long ptr)
 23 stdcall AtlUpdateRegistryFromResourceD(long wstr long ptr ptr)
diff --git a/dlls/atl80/atl80.spec b/dlls/atl80/atl80.spec
index dfc9c43..dbd38aa 100644
--- a/dlls/atl80/atl80.spec
+++ b/dlls/atl80/atl80.spec
@@ -4,7 +4,7 @@
 13 stdcall AtlMarshalPtrInProc(ptr ptr ptr) atl100.AtlMarshalPtrInProc
 14 stdcall AtlUnmarshalPtr(ptr ptr ptr) atl100.AtlUnmarshalPtr
 15 stdcall AtlComModuleGetClassObject(ptr ptr ptr ptr) atl100.AtlComModuleGetClassObject
-17 stub AtlComModuleRegisterClassObjects
+17 stdcall AtlComModuleRegisterClassObjects(ptr long long) atl100.AtlComModuleRegisterClassObjects
 18 stdcall AtlComModuleRegisterServer(ptr long ptr)
 19 stdcall AtlRegisterTypeLib(ptr wstr)
 20 stub AtlComModuleRevokeClassObjects
diff --git a/include/atlbase.h b/include/atlbase.h
index 7d18d81..1036b10 100644
--- a/include/atlbase.h
+++ b/include/atlbase.h
@@ -255,6 +255,7 @@ HRESULT WINAPI AtlLoadTypeLib(HINSTANCE,LPCOLESTR,BSTR*,ITypeLib**);
 HRESULT WINAPI AtlRegisterTypeLib(HINSTANCE,LPCOLESTR);
 HRESULT WINAPI AtlRegisterClassCategoriesHelper(REFCLSID,const struct _ATL_CATMAP_ENTRY*,BOOL);
 HRESULT WINAPI AtlComModuleGetClassObject(_ATL_COM_MODULE*,REFCLSID,REFIID,void**);
+HRESULT WINAPI AtlComModuleRegisterClassObjects(_ATL_COM_MODULE*,DWORD,DWORD);
 HRESULT WINAPI AtlComModuleUnregisterServer(_ATL_COM_MODULE*,BOOL,const CLSID*);
 BOOL WINAPI AtlWaitWithMessageLoop(HANDLE);
 HRESULT WINAPI AtlGetObjectSourceInterface(IUnknown*,GUID*,IID*,unsigned short*,unsigned short*);




More information about the wine-cvs mailing list