3 * Copyright 2011 Alistair Leslie-Hughes
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
29 #include "wine/unicode.h"
30 #include "wine/debug.h"
31 #include "wine/library.h"
36 WINE_DEFAULT_DEBUG_CHANNEL(mmc
);
38 static HINSTANCE MMC_hInstance
;
40 static HRESULT WINAPI
mmcversion_QueryInterface(IMMCVersionInfo
*iface
, REFIID riid
, void **ppv
)
42 TRACE("(%p)->(%s %p)\n", iface
, debugstr_guid(riid
), ppv
);
44 if ( IsEqualGUID( riid
, &IID_IMMCVersionInfo
) ||
45 IsEqualGUID( riid
, &IID_IUnknown
) )
51 TRACE("Unsupported interface %s\n", debugstr_guid(riid
));
56 IMMCVersionInfo_AddRef(iface
);
60 static ULONG WINAPI
mmcversion_AddRef(IMMCVersionInfo
*iface
)
65 static ULONG WINAPI
mmcversion_Release(IMMCVersionInfo
*iface
)
70 static HRESULT WINAPI
mmcversion_GetMMCVersion(IMMCVersionInfo
*iface
, LONG
*pVersionMajor
, LONG
*pVersionMinor
)
72 TRACE("(%p, %p, %p): stub\n", iface
, pVersionMajor
, pVersionMinor
);
83 static const struct IMMCVersionInfoVtbl mmcversionVtbl
=
85 mmcversion_QueryInterface
,
88 mmcversion_GetMMCVersion
91 static IMMCVersionInfo mmcVersionInfo
= { &mmcversionVtbl
};
93 /***********************************************************
94 * ClassFactory implementation
96 typedef HRESULT (*CreateInstanceFunc
)(IUnknown
*,REFIID
,void**);
98 static HRESULT WINAPI
ClassFactory_QueryInterface(IClassFactory
*iface
, REFGUID riid
, void **ppvObject
)
100 if(IsEqualGUID(&IID_IClassFactory
, riid
) || IsEqualGUID(&IID_IUnknown
, riid
)) {
101 IClassFactory_AddRef(iface
);
106 WARN("not supported iid %s\n", debugstr_guid(riid
));
108 return E_NOINTERFACE
;
111 static ULONG WINAPI
ClassFactory_AddRef(IClassFactory
*iface
)
113 TRACE("(%p)\n", iface
);
117 static ULONG WINAPI
ClassFactory_Release(IClassFactory
*iface
)
119 TRACE("(%p)\n", iface
);
124 static HRESULT WINAPI
ClassFactory_CreateInstance(IClassFactory
*iface
, IUnknown
*outer
,
125 REFIID riid
, void **ppv
)
127 TRACE("(%p %s %p)\n", outer
, debugstr_guid(riid
), ppv
);
128 return IMMCVersionInfo_QueryInterface(&mmcVersionInfo
, riid
, ppv
);
131 static HRESULT WINAPI
ClassFactory_LockServer(IClassFactory
*iface
, BOOL fLock
)
133 TRACE("(%p)->(%x)\n", iface
, fLock
);
137 static const IClassFactoryVtbl MMCClassFactoryVtbl
= {
138 ClassFactory_QueryInterface
,
140 ClassFactory_Release
,
141 ClassFactory_CreateInstance
,
142 ClassFactory_LockServer
145 static IClassFactory MMCVersionInfoFactory
= { &MMCClassFactoryVtbl
};
147 HRESULT WINAPI
DllGetClassObject( REFCLSID riid
, REFIID iid
, LPVOID
*ppv
)
149 TRACE("%s %s %p\n", debugstr_guid(riid
), debugstr_guid(iid
), ppv
);
151 if( IsEqualCLSID( riid
, &CLSID_MMCVersionInfo
))
153 TRACE("(CLSID_MMCVersionInfo %s %p)\n", debugstr_guid(riid
), ppv
);
154 return IClassFactory_QueryInterface(&MMCVersionInfoFactory
, iid
, ppv
);
157 FIXME("Unsupported interface %s\n", debugstr_guid(riid
));
158 return CLASS_E_CLASSNOTAVAILABLE
;
161 HRESULT WINAPI
DllRegisterServer(void)
163 return __wine_register_resources( MMC_hInstance
);
166 HRESULT WINAPI
DllUnregisterServer(void)
168 return __wine_unregister_resources( MMC_hInstance
);
171 HRESULT WINAPI
DllCanUnloadNow(void)
176 BOOL WINAPI
DllMain(HINSTANCE hinstDLL
, DWORD fdwReason
, LPVOID lpvReserved
)
178 TRACE("(%p, %d, %p)\n", hinstDLL
, fdwReason
, lpvReserved
);
182 case DLL_WINE_PREATTACH
:
183 return FALSE
; /* prefer native version */
184 case DLL_PROCESS_ATTACH
:
185 MMC_hInstance
= hinstDLL
;