Alexandre Julliard : infosoft: Convert dll registration to the IRegistrar mechanism.

Alexandre Julliard julliard at winehq.org
Tue Dec 7 10:59:30 CST 2010


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Dec  7 14:50:56 2010 +0100

infosoft: Convert dll registration to the IRegistrar mechanism.

---

 .gitignore                    |    1 +
 dlls/infosoft/Makefile.in     |    3 ++
 dlls/infosoft/infosoft.idl    |   26 +++++++++++++++++++++
 dlls/infosoft/infosoft_main.c |   50 +++++++++-------------------------------
 4 files changed, 42 insertions(+), 38 deletions(-)

diff --git a/.gitignore b/.gitignore
index dd74759..a981f92 100644
--- a/.gitignore
+++ b/.gitignore
@@ -50,6 +50,7 @@ dlls/d3dcompiler_43/asmshader.yy.c
 dlls/dispex/disp_ex.h
 dlls/dispex/disp_ex_p.c
 dlls/dxdiagn/fil_data.h
+dlls/infosoft/infosoft.h
 dlls/jscript/jsglobal.tlb
 dlls/jscript/parser.tab.c
 dlls/jscript/parser.tab.h
diff --git a/dlls/infosoft/Makefile.in b/dlls/infosoft/Makefile.in
index 36c4a02..f6af67c 100644
--- a/dlls/infosoft/Makefile.in
+++ b/dlls/infosoft/Makefile.in
@@ -6,4 +6,7 @@ C_SRCS = \
 	infosoft_main.c \
 	wordbreaker.c
 
+IDL_H_SRCS = infosoft.idl
+IDL_R_SRCS = infosoft.idl
+
 @MAKE_DLL_RULES@
diff --git a/dlls/infosoft/infosoft.idl b/dlls/infosoft/infosoft.idl
new file mode 100644
index 0000000..2891617
--- /dev/null
+++ b/dlls/infosoft/infosoft.idl
@@ -0,0 +1,26 @@
+/*
+ * COM Classes for infosoft
+ *
+ * Copyright 2010 Alexandre Julliard
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+[
+    helpstring("Neutral Word Breaker"),
+    threading(both),
+    uuid(369647e0-17b0-11ce-9950-00aa004bbb1f)
+]
+coclass wb_Neutral { interface IWordBreaker; }
diff --git a/dlls/infosoft/infosoft_main.c b/dlls/infosoft/infosoft_main.c
index a177dfd..619eca2 100644
--- a/dlls/infosoft/infosoft_main.c
+++ b/dlls/infosoft/infosoft_main.c
@@ -28,16 +28,17 @@
 #include "windef.h"
 #include "winbase.h"
 #include "winuser.h"
-#include "winreg.h"
 #include "ole2.h"
+#include "rpcproxy.h"
 #include "indexsrv.h"
 #include "initguid.h"
+#include "infosoft.h"
 
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(infosoft);
 
-DEFINE_GUID(CLSID_wb_Neutral,0x369647e0,0x17b0,0x11ce,0x99,0x50,0x00,0xaa,0x00,0x4b,0xbb,0x1f);
+static HINSTANCE instance;
 
 BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
 {
@@ -46,6 +47,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
     case DLL_WINE_PREATTACH:
         return FALSE;  /* prefer native version */
     case DLL_PROCESS_ATTACH:
+        instance = hInstDLL;
         DisableThreadLibraryCalls(hInstDLL);
         break;
     case DLL_PROCESS_DETACH:
@@ -155,46 +157,18 @@ HRESULT WINAPI DllCanUnloadNow(void)
     return S_FALSE;
 }
 
-static HRESULT add_key_val( LPCSTR key, LPCSTR valname, LPCSTR value )
-{
-    HKEY hkey;
-
-    if (RegCreateKeyA( HKEY_CLASSES_ROOT, key, &hkey ) != ERROR_SUCCESS) return E_FAIL;
-    RegSetValueA( hkey, valname, REG_SZ, value, strlen( value ) + 1 );
-    RegCloseKey( hkey );
-    return S_OK;
-}
-
-static HRESULT add_wordbreaker_clsid( LPCSTR lang, const CLSID *id)
-{
-    CHAR key[100], val[50];
-
-    strcpy(key, "CLSID\\");
-    sprintf(key+6, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
-            id->Data1, id->Data2, id->Data3,
-            id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3],
-            id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7]);
-    sprintf(val, "%s Word Breaker", lang);
-    add_key_val( key, NULL, val );
-    strcat(key, "\\InProcServer32");
-    add_key_val( key, NULL, "infosoft.dll" );
-    add_key_val( key, "ThreadingModel", "Both" );
-    return S_OK;
-}
-
-#define ADD_BREAKER(name)  add_wordbreaker_clsid( #name, &CLSID_wb_##name )
-
-static HRESULT add_content_index_keys(void)
+/***********************************************************************
+ *		DllRegisterServer (INFOSOFT.@)
+ */
+HRESULT WINAPI DllRegisterServer(void)
 {
-    ADD_BREAKER(Neutral); /* in query.dll on Windows */
-    return S_OK;
+    return __wine_register_resources( instance, NULL );
 }
 
 /***********************************************************************
- *             DllRegisterServer (INFOSOFT.@)
+ *		DllUnregisterServer (INFOSOFT.@)
  */
-HRESULT WINAPI DllRegisterServer(void)
+HRESULT WINAPI DllUnregisterServer(void)
 {
-    add_content_index_keys();
-    return S_OK;
+    return __wine_unregister_resources( instance, NULL );
 }




More information about the wine-cvs mailing list