Module: wine Branch: master Commit: a97a667670c6028d9466491b9fbef664d0ebcf29 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a97a667670c6028d9466491b9f...
Author: Jacek Caban jacek@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 = ®istrar->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(®istrar); + 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__ */