Module: wine Branch: refs/heads/master Commit: b23b4f5d0101f48d20aa252d1462243b751e5e40 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=b23b4f5d0101f48d20aa252d...
Author: Mike McCormack mike@codeweavers.com Date: Tue Jun 6 20:42:39 2006 +0900
hlink: Implement DllRegisterServer.
---
dlls/hlink/hlink.spec | 4 ++-- dlls/hlink/hlink_main.c | 42 ++++++++++++++++++++++++++++++++++++++++++ tools/wine.inf | 1 + 3 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/dlls/hlink/hlink.spec b/dlls/hlink/hlink.spec index 075fcd4..7f843fc 100644 --- a/dlls/hlink/hlink.spec +++ b/dlls/hlink/hlink.spec @@ -29,5 +29,5 @@
@ stdcall -private DllCanUnloadNow() @ stdcall -private DllGetClassObject(ptr ptr ptr) -@ stub -private DllRegisterServer -@ stub -private DllUnregisterServer +@ stdcall -private DllRegisterServer() +# @ stub -private DllUnregisterServer diff --git a/dlls/hlink/hlink_main.c b/dlls/hlink/hlink_main.c index 584ddac..9a535d7 100644 --- a/dlls/hlink/hlink_main.c +++ b/dlls/hlink/hlink_main.c @@ -26,6 +26,7 @@ #include "winerror.h" #include "windef.h" #include "winbase.h" #include "winuser.h" +#include "winreg.h" #include "ole2.h" #include "unknwn.h"
@@ -312,3 +313,44 @@ HRESULT WINAPI DllGetClassObject(REFCLSI
return IClassFactory_QueryInterface(pcf, iid, ppv); } + +static HRESULT register_clsid(LPCGUID guid) +{ + static const WCHAR clsid[] = + {'C','L','S','I','D','\',0}; + static const WCHAR ips[] = + {'\','I','n','p','r','o','c','S','e','r','v','e','r','3','2',0}; + static const WCHAR hlink[] = + {'h','l','i','n','k','.','d','l','l',0}; + static const WCHAR threading_model[] = + {'T','h','r','e','a','d','i','n','g','M','o','d','e','l',0}; + static const WCHAR apartment[] = + {'A','p','a','r','t','m','e','n','t',0}; + WCHAR path[80]; + HKEY key = NULL; + LONG r; + + lstrcpyW(path, clsid); + StringFromGUID2(guid, &path[6], 80); + lstrcatW(path, ips); + r = RegCreateKeyW(HKEY_CLASSES_ROOT, path, &key); + if (r != ERROR_SUCCESS) + return E_FAIL; + + RegSetValueExW(key, NULL, 0, REG_SZ, (LPBYTE)hlink, sizeof hlink); + RegSetValueExW(key, threading_model, 0, REG_SZ, (LPBYTE)apartment, sizeof apartment); + RegCloseKey(key); + + return S_OK; +} + +HRESULT WINAPI DllRegisterServer(void) +{ + HRESULT r; + + r = register_clsid(&CLSID_StdHlink); + if (SUCCEEDED(r)) + r = register_clsid(&CLSID_StdHlinkBrowseContext); + + return S_OK; +} diff --git a/tools/wine.inf b/tools/wine.inf index 96ba9e9..04ed3f7 100644 --- a/tools/wine.inf +++ b/tools/wine.inf @@ -2091,6 +2091,7 @@ HKLM,%CurrentVersion%\Telephony\Country 11,,dswave.dll,1 11,,dxdiagn.dll,1 11,,hhctrl.ocx,1 +11,,hlink.dll,1 11,,itss.dll,1 11,,mlang.dll,1 11,,mshtml.dll,1