msi: Re-publish product if previous installation with different package is detected.
[wine.git] / dlls / wmp / wmp_main.c
blob273d193e5893a34b037b3a82547e2c1564fad191
1 /*
2 * Copyright 2014 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 #include "initguid.h"
20 #include "wmp_private.h"
21 #include "rpcproxy.h"
23 #include "wine/debug.h"
25 WINE_DEFAULT_DEBUG_CHANNEL(wmp);
27 HINSTANCE wmp_instance;
28 DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
30 static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
32 *ppv = NULL;
34 if(IsEqualGUID(&IID_IUnknown, riid)) {
35 TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
36 *ppv = iface;
37 }else if(IsEqualGUID(&IID_IClassFactory, riid)) {
38 TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
39 *ppv = iface;
42 if(*ppv) {
43 IUnknown_AddRef((IUnknown*)*ppv);
44 return S_OK;
47 FIXME("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
48 return E_NOINTERFACE;
51 static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
53 TRACE("(%p)\n", iface);
54 return 2;
57 static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
59 TRACE("(%p)\n", iface);
60 return 1;
63 static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
65 TRACE("(%p)->(%x)\n", iface, fLock);
66 return S_OK;
69 static const IClassFactoryVtbl WMPFactoryVtbl = {
70 ClassFactory_QueryInterface,
71 ClassFactory_AddRef,
72 ClassFactory_Release,
73 WMPFactory_CreateInstance,
74 ClassFactory_LockServer
77 static IClassFactory WMPFactory = { &WMPFactoryVtbl };
79 /******************************************************************
80 * DllMain (wmp.@)
82 BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
84 TRACE("(%p %d %p)\n", hInstDLL, fdwReason, lpv);
86 switch(fdwReason) {
87 case DLL_WINE_PREATTACH:
88 return FALSE; /* prefer native version */
89 case DLL_PROCESS_ATTACH:
90 DisableThreadLibraryCalls(hInstDLL);
91 wmp_instance = hInstDLL;
92 break;
93 case DLL_PROCESS_DETACH:
94 unregister_wmp_class();
95 unregister_player_msg_class();
96 break;
99 return TRUE;
102 /***********************************************************************
103 * DllGetClassObject (wmp.@)
105 HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
107 if(IsEqualGUID(&CLSID_WindowsMediaPlayer, rclsid)) {
108 TRACE("(CLSID_WindowsMediaPlayer %s %p)\n", debugstr_guid(riid), ppv);
109 return IClassFactory_QueryInterface(&WMPFactory, riid, ppv);
112 FIXME("Unknown object %s\n", debugstr_guid(rclsid));
113 return CLASS_E_CLASSNOTAVAILABLE;
116 /***********************************************************************
117 * DllCanUnloadNow (wmp.@)
119 HRESULT WINAPI DllCanUnloadNow(void)
121 TRACE("\n");
122 return S_FALSE;
125 /***********************************************************************
126 * DllRegisterServer (wmp.@)
128 HRESULT WINAPI DllRegisterServer(void)
130 TRACE("()\n");
131 return __wine_register_resources(wmp_instance);
134 /***********************************************************************
135 * DllUnregisterServer (wmp.@)
137 HRESULT WINAPI DllUnregisterServer(void)
139 TRACE("()\n");
140 return __wine_unregister_resources(wmp_instance);