From 79bab49904d870f23d74da46665164484b5ee831 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 7 Dec 2010 14:50:56 +0100 Subject: [PATCH] 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 | 54 +++++++++-------------------------- 4 files changed, 44 insertions(+), 40 deletions(-) create mode 100644 dlls/infosoft/infosoft.idl diff --git a/.gitignore b/.gitignore index dd74759a436..a981f92ca2d 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 36c4a023368..f6af67ce8d4 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 00000000000..2891617f967 --- /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 a177dfdb57f..619eca21a6a 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) -{ - ADD_BREAKER(Neutral); /* in query.dll on Windows */ - return S_OK; -} - /*********************************************************************** - * DllRegisterServer (INFOSOFT.@) + * DllRegisterServer (INFOSOFT.@) */ HRESULT WINAPI DllRegisterServer(void) { - add_content_index_keys(); - return S_OK; + return __wine_register_resources( instance, NULL ); +} + +/*********************************************************************** + * DllUnregisterServer (INFOSOFT.@) + */ +HRESULT WINAPI DllUnregisterServer(void) +{ + return __wine_unregister_resources( instance, NULL ); }