ReactOS 0.4.17-dev-934-g091855f
main.c
Go to the documentation of this file.
1/* DirectDrawEx
2 *
3 * Copyright 2006 Ulrich Czekalla
4 *
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.
9 *
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.
14 *
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
18 */
19
20
21#include "wine/debug.h"
22
23#define COBJMACROS
24
25#include "winbase.h"
26#include "wingdi.h"
27#include "objbase.h"
28#include "rpcproxy.h"
29
30#include "ddraw.h"
31
32#include "initguid.h"
33#include "ddrawex_private.h"
34
36
38{
42};
43
45{
47}
48
50{
51 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
52
55 {
56 IClassFactory_AddRef(iface);
57 *out = iface;
58 return S_OK;
59 }
60
61 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
62
63 *out = NULL;
64 return E_NOINTERFACE;
65}
66
68{
71
72 TRACE("%p increasing refcount to %lu.\n", iface, refcount);
73
74 return refcount;
75}
76
78{
81
82 TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
83
84 if (!refcount)
86
87 return refcount;
88}
89
91 IUnknown *outer_unknown, REFIID riid, void **out)
92{
94
95 TRACE("iface %p, outer_unknown %p, riid %s, out %p.\n",
96 iface, outer_unknown, debugstr_guid(riid), out);
97
98 return factory->pfnCreateInstance(outer_unknown, riid, out);
99}
100
102{
103 FIXME("iface %p, dolock %#x stub!\n", iface, dolock);
104
105 return S_OK;
106}
107
108static const IClassFactoryVtbl ddrawex_class_factory_vtbl =
109{
115};
116
118{
119 IDirectDrawFactory IDirectDrawFactory_iface;
121};
122
123static inline struct ddrawex_factory *impl_from_IDirectDrawFactory(IDirectDrawFactory *iface)
124{
126}
127
128static HRESULT WINAPI ddrawex_factory_QueryInterface(IDirectDrawFactory *iface, REFIID riid, void **out)
129{
130 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
131
132 if (IsEqualGUID(riid, &IID_IDirectDrawFactory)
134 {
136 *out = iface;
137 return S_OK;
138 }
139
140 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
141
142 *out = NULL;
143 return E_NOINTERFACE;
144}
145
146static ULONG WINAPI ddrawex_factory_AddRef(IDirectDrawFactory *iface)
147{
150
151 TRACE("%p increasing refcount to %lu.\n", iface, refcount);
152
153 return refcount;
154}
155
156static ULONG WINAPI ddrawex_factory_Release(IDirectDrawFactory *iface)
157{
160
161 TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
162
163 if (!refcount)
164 free(factory);
165
166 return refcount;
167}
168
169static HRESULT WINAPI ddrawex_factory_DirectDrawEnumerate(IDirectDrawFactory *iface,
170 LPDDENUMCALLBACKW cb, void *ctx)
171{
172 FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx);
173
174 return E_FAIL;
175}
176
177static const IDirectDrawFactoryVtbl ddrawex_factory_vtbl =
178{
184};
185
186static HRESULT ddrawex_factory_create(IUnknown *outer_unknown, REFIID riid, void **out)
187{
188 struct ddrawex_factory *factory;
189 HRESULT hr;
190
191 TRACE("outer_unknown %p, riid %s, out %p.\n", outer_unknown, debugstr_guid(riid), out);
192
193 if (outer_unknown)
195
196 if (!(factory = calloc(1, sizeof(*factory))))
197 return E_OUTOFMEMORY;
198
199 factory->IDirectDrawFactory_iface.lpVtbl = &ddrawex_factory_vtbl;
200
201 if (FAILED(hr = ddrawex_factory_QueryInterface(&factory->IDirectDrawFactory_iface, riid, out)))
202 free(factory);
203
204 return hr;
205}
206
207/*******************************************************************************
208 * DllGetClassObject [DDRAWEX.@]
209 */
211{
213
214 TRACE("rclsid %s, riid %s, out %p.\n", debugstr_guid(rclsid), debugstr_guid(riid), out);
215
218 return E_NOINTERFACE;
219
220 if (!IsEqualGUID(&CLSID_DirectDrawFactory, rclsid))
221 {
222 FIXME("%s: no class found.\n", debugstr_guid(rclsid));
224 }
225
226 if (!(factory = calloc(1, sizeof(*factory))))
227 return E_OUTOFMEMORY;
228
230 factory->ref = 1;
231
232 factory->pfnCreateInstance = ddrawex_factory_create;
233
234 *out = factory;
235
236 return S_OK;
237}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
const GUID IID_IClassFactory
#define IDirectDrawFactory_AddRef(p)
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: main.c:153
static IClassFactoryImpl * impl_from_IClassFactory(IClassFactory *iface)
Definition: main.c:49
HRESULT WINAPI ddrawex_factory_CreateDirectDraw(IDirectDrawFactory *iface, GUID *guid, HWND window, DWORD coop_level, DWORD reserved, IUnknown *outer_unknown, IDirectDraw **ddraw)
Definition: ddraw.c:1415
static HRESULT WINAPI ddrawex_factory_QueryInterface(IDirectDrawFactory *iface, REFIID riid, void **out)
Definition: main.c:128
static ULONG WINAPI ddrawex_class_factory_AddRef(IClassFactory *iface)
Definition: main.c:67
static ULONG WINAPI ddrawex_factory_AddRef(IDirectDrawFactory *iface)
Definition: main.c:146
static HRESULT WINAPI ddrawex_factory_DirectDrawEnumerate(IDirectDrawFactory *iface, LPDDENUMCALLBACKW cb, void *ctx)
Definition: main.c:169
static ULONG WINAPI ddrawex_class_factory_Release(IClassFactory *iface)
Definition: main.c:77
static const IClassFactoryVtbl ddrawex_class_factory_vtbl
Definition: main.c:108
static HRESULT ddrawex_factory_create(IUnknown *outer_unknown, REFIID riid, void **out)
Definition: main.c:186
static HRESULT WINAPI ddrawex_class_factory_CreateInstance(IClassFactory *iface, IUnknown *outer_unknown, REFIID riid, void **out)
Definition: main.c:90
static struct ddrawex_factory * impl_from_IDirectDrawFactory(IDirectDrawFactory *iface)
Definition: main.c:123
static HRESULT WINAPI ddrawex_class_factory_LockServer(IClassFactory *iface, BOOL dolock)
Definition: main.c:101
static ULONG WINAPI ddrawex_factory_Release(IDirectDrawFactory *iface)
Definition: main.c:156
static const IDirectDrawFactoryVtbl ddrawex_factory_vtbl
Definition: main.c:177
static HRESULT WINAPI ddrawex_class_factory_QueryInterface(IClassFactory *iface, REFIID riid, void **out)
Definition: main.c:49
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
unsigned int BOOL
Definition: ntddk_ex.h:94
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
static IUnknown * outer
Definition: compobj.c:82
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
#define calloc
Definition: rosglue.h:14
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT(* pfnCreateInstance)(IUnknown *outer, REFIID iid, void **out)
Definition: main.c:41
IClassFactory IClassFactory_iface
Definition: main.c:39
IDirectDrawFactory IDirectDrawFactory_iface
Definition: main.c:119
LONG ref
Definition: main.c:120
Definition: main.c:439
IClassFactory IClassFactory_iface
Definition: main.c:440
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define HRESULT
Definition: msvc.h:7
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479
#define CLASS_E_NOAGGREGATION
Definition: winerror.h:3771
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772