Jacek Caban : atl100: Added AtlUpdateRegistryFromResourceD implementation ( based on AtlModuleUpdateRegistryFromResourceD).

Alexandre Julliard julliard at winehq.org
Tue Dec 11 14:41:15 CST 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Dec 11 13:02:14 2012 +0100

atl100: Added AtlUpdateRegistryFromResourceD implementation (based on AtlModuleUpdateRegistryFromResourceD).

---

 dlls/atl100/atl100.spec |    2 +-
 dlls/atl100/registrar.c |   45 +++++++++++++++++++++++++++++++++++++++++++++
 include/atlbase.h       |    1 +
 3 files changed, 47 insertions(+), 1 deletions(-)

diff --git a/dlls/atl100/atl100.spec b/dlls/atl100/atl100.spec
index 47e3c56..13e043b 100644
--- a/dlls/atl100/atl100.spec
+++ b/dlls/atl100/atl100.spec
@@ -7,7 +7,7 @@
 17 stub AtlComModuleRegisterClassObjects
 20 stub AtlComModuleRevokeClassObjects
 22 stub AtlComModuleUnregisterServer
-23 stub AtlUpdateRegistryFromResourceD
+23 stdcall AtlUpdateRegistryFromResourceD(long wstr long ptr ptr)
 24 stub AtlWaitWithMessageLoop
 25 stub AtlSetErrorInfo
 26 stdcall AtlCreateTargetDC(long ptr)
diff --git a/dlls/atl100/registrar.c b/dlls/atl100/registrar.c
index f9f5b3c..9cad32a 100644
--- a/dlls/atl100/registrar.c
+++ b/dlls/atl100/registrar.c
@@ -702,3 +702,48 @@ HRESULT WINAPI AtlCreateRegistrar(IRegistrar **ret)
     *ret = &registrar->IRegistrar_iface;
     return S_OK;
 }
+
+/***********************************************************************
+ *           AtlUpdateRegistryFromResourceD         [atl100.@]
+ */
+HRESULT WINAPI AtlUpdateRegistryFromResourceD(HINSTANCE inst, LPCOLESTR res,
+        BOOL bRegister, struct _ATL_REGMAP_ENTRY *pMapEntries, IRegistrar *pReg)
+{
+    const struct _ATL_REGMAP_ENTRY *iter;
+    WCHAR module_name[MAX_PATH];
+    IRegistrar *registrar;
+    HRESULT hres;
+
+    static const WCHAR moduleW[] = {'M','O','D','U','L','E',0};
+    static const WCHAR registryW[] = {'R','E','G','I','S','T','R','Y',0};
+
+    if(!GetModuleFileNameW(inst, module_name, MAX_PATH)) {
+        FIXME("hinst %p: did not get module name\n", inst);
+        return E_FAIL;
+    }
+
+    TRACE("%p (%s), %s, %d, %p, %p\n", inst, debugstr_w(module_name),
+	debugstr_w(res), bRegister, pMapEntries, pReg);
+
+    if(pReg) {
+        registrar = pReg;
+    }else {
+        hres = AtlCreateRegistrar(&registrar);
+        if(FAILED(hres))
+            return hres;
+    }
+
+    IRegistrar_AddReplacement(registrar, moduleW, module_name);
+
+    for (iter = pMapEntries; iter && iter->szKey; iter++)
+        IRegistrar_AddReplacement(registrar, iter->szKey, iter->szData);
+
+    if(bRegister)
+        hres = IRegistrar_ResourceRegisterSz(registrar, module_name, res, registryW);
+    else
+        hres = IRegistrar_ResourceUnregisterSz(registrar, module_name, res, registryW);
+
+    if(registrar != pReg)
+        IRegistrar_Release(registrar);
+    return hres;
+}
diff --git a/include/atlbase.h b/include/atlbase.h
index 1e48f58..5dd0d5b 100644
--- a/include/atlbase.h
+++ b/include/atlbase.h
@@ -210,5 +210,6 @@ HRESULT WINAPI AtlModuleTerm(_ATL_MODULEW* pM);
 HRESULT WINAPI AtlUnadvise(IUnknown *pUnkCP, const IID * iid, DWORD dw);
 HRESULT WINAPI AtlUnmarshalPtr(IStream *pStream, const IID *iid, IUnknown **ppUnk);
 HRESULT WINAPI AtlCreateRegistrar(IRegistrar**);
+HRESULT WINAPI AtlUpdateRegistryFromResourceD(HINSTANCE,LPCOLESTR,BOOL,struct _ATL_REGMAP_ENTRY*,IRegistrar*);
 
 #endif /* __WINE_ATLBASE_H__ */




More information about the wine-cvs mailing list