Mike McCormack : hlink: Implement DllRegisterServer.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jun 7 07:49:17 CDT 2006


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

Author: Mike McCormack <mike at 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




More information about the wine-cvs mailing list