Mike McCormack : msi: Move COM server implementation to a separate file.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jul 24 13:15:07 CDT 2006


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

Author: Mike McCormack <mike at codeweavers.com>
Date:   Mon Jul 24 19:47:00 2006 +0900

msi: Move COM server implementation to a separate file.

---

 dlls/msi/Makefile.in |    1 
 dlls/msi/msi.c       |  149 -----------------------------------------
 dlls/msi/msi_main.c  |  180 ++++++++++++++++++++++++++++++++++++++++++++++++++
 dlls/msi/msipriv.h   |    1 
 4 files changed, 182 insertions(+), 149 deletions(-)
 create mode 100644 dlls/msi/msi_main.c

diff --git a/dlls/msi/Makefile.in b/dlls/msi/Makefile.in
index dabdf1f..744ce2b 100644
--- a/dlls/msi/Makefile.in
+++ b/dlls/msi/Makefile.in
@@ -25,6 +25,7 @@ C_SRCS = \
 	insert.c \
 	install.c \
 	msi.c \
+	msi_main.c \
 	msiquery.c \
 	order.c \
 	package.c \
diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c
index 7e4bae3..70f9c9b 100644
--- a/dlls/msi/msi.c
+++ b/dlls/msi/msi.c
@@ -43,34 +43,8 @@ #include "action.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(msi);
 
-/* the UI level */
-INSTALLUILEVEL gUILevel = INSTALLUILEVEL_BASIC;
-HWND           gUIhwnd = 0;
-INSTALLUI_HANDLERA gUIHandlerA = NULL;
-INSTALLUI_HANDLERW gUIHandlerW = NULL;
-DWORD gUIFilter = 0;
-LPVOID gUIContext = NULL;
-WCHAR gszLogFile[MAX_PATH];
-HINSTANCE msi_hInstance;
-
-static LONG dll_count;
-
 static const WCHAR installerW[] = {'\\','I','n','s','t','a','l','l','e','r',0};
 
-/*
- * Dll lifetime tracking declaration
- */
-static void LockModule(void)
-{
-    InterlockedIncrement(&dll_count);
-}
-
-static void UnlockModule(void)
-{
-    InterlockedDecrement(&dll_count);
-}
-
-
 UINT WINAPI MsiOpenProductA(LPCSTR szProduct, MSIHANDLE *phProduct)
 {
     UINT r;
@@ -1320,129 +1294,6 @@ end:
     return ret;
 }
 
-
-/******************************************************************
- *    	DllMain
- */
-BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-{
-    switch(fdwReason)
-    {
-    case DLL_PROCESS_ATTACH:
-        msi_hInstance = hinstDLL;
-        DisableThreadLibraryCalls(hinstDLL);
-        msi_dialog_register_class();
-        break;
-    case DLL_PROCESS_DETACH:
-        msi_dialog_unregister_class();
-        /* FIXME: Cleanup */
-        break;
-    }
-    return TRUE;
-}
-
-typedef struct tagIClassFactoryImpl
-{
-    const IClassFactoryVtbl *lpVtbl;
-} IClassFactoryImpl;
-
-static HRESULT WINAPI MsiCF_QueryInterface(LPCLASSFACTORY iface,
-                REFIID riid,LPVOID *ppobj)
-{
-    IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
-    FIXME("%p %s %p\n",This,debugstr_guid(riid),ppobj);
-    return E_NOINTERFACE;
-}
-
-static ULONG WINAPI MsiCF_AddRef(LPCLASSFACTORY iface)
-{
-    LockModule();
-    return 2;
-}
-
-static ULONG WINAPI MsiCF_Release(LPCLASSFACTORY iface)
-{
-    UnlockModule();
-    return 1;
-}
-
-static HRESULT WINAPI MsiCF_CreateInstance(LPCLASSFACTORY iface,
-    LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
-{
-    IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
-
-    FIXME("%p %p %s %p\n", This, pOuter, debugstr_guid(riid), ppobj);
-    return E_FAIL;
-}
-
-static HRESULT WINAPI MsiCF_LockServer(LPCLASSFACTORY iface, BOOL dolock)
-{
-    TRACE("(%p)->(%d)\n", iface, dolock);
-
-    if(dolock)
-        LockModule();
-    else
-        UnlockModule();
-
-    return S_OK;
-}
-
-static const IClassFactoryVtbl MsiCF_Vtbl =
-{
-    MsiCF_QueryInterface,
-    MsiCF_AddRef,
-    MsiCF_Release,
-    MsiCF_CreateInstance,
-    MsiCF_LockServer
-};
-
-static IClassFactoryImpl Msi_CF = { &MsiCF_Vtbl };
-
-/******************************************************************
- * DllGetClassObject          [MSI.@]
- */
-HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
-{
-    TRACE("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
-
-    if( IsEqualCLSID (rclsid, &CLSID_IMsiServer) ||
-        IsEqualCLSID (rclsid, &CLSID_IMsiServerMessage) ||
-        IsEqualCLSID (rclsid, &CLSID_IMsiServerX1) ||
-        IsEqualCLSID (rclsid, &CLSID_IMsiServerX2) ||
-        IsEqualCLSID (rclsid, &CLSID_IMsiServerX3) )
-    {
-        *ppv = (LPVOID) &Msi_CF;
-        return S_OK;
-    }
-    return CLASS_E_CLASSNOTAVAILABLE;
-}
-
-/******************************************************************
- * DllGetVersion              [MSI.@]
- */
-HRESULT WINAPI DllGetVersion(DLLVERSIONINFO *pdvi)
-{
-    TRACE("%p\n",pdvi);
-
-    if (pdvi->cbSize != sizeof(DLLVERSIONINFO))
-        return E_INVALIDARG;
-
-    pdvi->dwMajorVersion = MSI_MAJORVERSION;
-    pdvi->dwMinorVersion = MSI_MINORVERSION;
-    pdvi->dwBuildNumber = MSI_BUILDNUMBER;
-    pdvi->dwPlatformID = 1;
-
-    return S_OK;
-}
-
-/******************************************************************
- * DllCanUnloadNow            [MSI.@]
- */
-HRESULT WINAPI DllCanUnloadNow(void)
-{
-    return dll_count == 0 ? S_OK : S_FALSE;
-}
-
 /***********************************************************************
  * MsiGetFeatureUsageW           [MSI.@]
  */
diff --git a/dlls/msi/msi_main.c b/dlls/msi/msi_main.c
new file mode 100644
index 0000000..1cd36a0
--- /dev/null
+++ b/dlls/msi/msi_main.c
@@ -0,0 +1,180 @@
+/*
+ * Implementation of the Microsoft Installer (msi.dll)
+ *
+ * Copyright 2006 Mike McCormack for CodeWeavers
+ *
+ * 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
+ */
+
+#include <stdarg.h>
+
+#define COBJMACROS
+#define NONAMELESSUNION
+
+#include "windef.h"
+#include "winbase.h"
+#include "winreg.h"
+#include "shlwapi.h"
+#include "msipriv.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(msi);
+
+static LONG dll_count;
+
+/* the UI level */
+INSTALLUILEVEL gUILevel = INSTALLUILEVEL_BASIC;
+HWND           gUIhwnd = 0;
+INSTALLUI_HANDLERA gUIHandlerA = NULL;
+INSTALLUI_HANDLERW gUIHandlerW = NULL;
+DWORD gUIFilter = 0;
+LPVOID gUIContext = NULL;
+WCHAR gszLogFile[MAX_PATH];
+HINSTANCE msi_hInstance;
+
+/*
+ * Dll lifetime tracking declaration
+ */
+static void LockModule(void)
+{
+    InterlockedIncrement(&dll_count);
+}
+
+static void UnlockModule(void)
+{
+    InterlockedDecrement(&dll_count);
+}
+
+/******************************************************************
+ *    	DllMain
+ */
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+    switch (fdwReason)
+    {
+    case DLL_PROCESS_ATTACH:
+        msi_hInstance = hinstDLL;
+        DisableThreadLibraryCalls(hinstDLL);
+        msi_dialog_register_class();
+        break;
+    case DLL_PROCESS_DETACH:
+        msi_dialog_unregister_class();
+        break;
+    }
+    return TRUE;
+}
+
+typedef struct tagIClassFactoryImpl
+{
+    const IClassFactoryVtbl *lpVtbl;
+} IClassFactoryImpl;
+
+static HRESULT WINAPI MsiCF_QueryInterface(LPCLASSFACTORY iface,
+                REFIID riid,LPVOID *ppobj)
+{
+    IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
+    FIXME("%p %s %p\n",This,debugstr_guid(riid),ppobj);
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI MsiCF_AddRef(LPCLASSFACTORY iface)
+{
+    LockModule();
+    return 2;
+}
+
+static ULONG WINAPI MsiCF_Release(LPCLASSFACTORY iface)
+{
+    UnlockModule();
+    return 1;
+}
+
+static HRESULT WINAPI MsiCF_CreateInstance(LPCLASSFACTORY iface,
+    LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
+{
+    IClassFactoryImpl *This = (IClassFactoryImpl *)iface;
+
+    FIXME("%p %p %s %p\n", This, pOuter, debugstr_guid(riid), ppobj);
+    return E_FAIL;
+}
+
+static HRESULT WINAPI MsiCF_LockServer(LPCLASSFACTORY iface, BOOL dolock)
+{
+    TRACE("%p %d\n", iface, dolock);
+
+    if (dolock)
+        LockModule();
+    else
+        UnlockModule();
+
+    return S_OK;
+}
+
+static const IClassFactoryVtbl MsiCF_Vtbl =
+{
+    MsiCF_QueryInterface,
+    MsiCF_AddRef,
+    MsiCF_Release,
+    MsiCF_CreateInstance,
+    MsiCF_LockServer
+};
+
+static IClassFactoryImpl Msi_CF = { &MsiCF_Vtbl };
+
+/******************************************************************
+ * DllGetClassObject          [MSI.@]
+ */
+HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
+{
+    TRACE("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
+
+    if( IsEqualCLSID (rclsid, &CLSID_IMsiServer) ||
+        IsEqualCLSID (rclsid, &CLSID_IMsiServerMessage) ||
+        IsEqualCLSID (rclsid, &CLSID_IMsiServerX1) ||
+        IsEqualCLSID (rclsid, &CLSID_IMsiServerX2) ||
+        IsEqualCLSID (rclsid, &CLSID_IMsiServerX3) )
+    {
+        *ppv = (LPVOID) &Msi_CF;
+        return S_OK;
+    }
+    return CLASS_E_CLASSNOTAVAILABLE;
+}
+
+/******************************************************************
+ * DllGetVersion              [MSI.@]
+ */
+HRESULT WINAPI DllGetVersion(DLLVERSIONINFO *pdvi)
+{
+    TRACE("%p\n",pdvi);
+
+    if (pdvi->cbSize != sizeof(DLLVERSIONINFO))
+        return E_INVALIDARG;
+
+    pdvi->dwMajorVersion = MSI_MAJORVERSION;
+    pdvi->dwMinorVersion = MSI_MINORVERSION;
+    pdvi->dwBuildNumber = MSI_BUILDNUMBER;
+    pdvi->dwPlatformID = 1;
+
+    return S_OK;
+}
+
+/******************************************************************
+ * DllCanUnloadNow            [MSI.@]
+ */
+HRESULT WINAPI DllCanUnloadNow(void)
+{
+    return dll_count == 0 ? S_OK : S_FALSE;
+}
diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h
index b2fe5bc..3fa8466 100644
--- a/dlls/msi/msipriv.h
+++ b/dlls/msi/msipriv.h
@@ -466,6 +466,7 @@ extern INSTALLUI_HANDLERW gUIHandlerW;
 extern DWORD gUIFilter;
 extern LPVOID gUIContext;
 extern WCHAR gszLogFile[MAX_PATH];
+extern HINSTANCE msi_hInstance;
 
 /* memory allocation macro functions */
 static inline void *msi_alloc( size_t len )




More information about the wine-cvs mailing list