ReactOS  0.4.13-dev-544-gede3fdd
main.c
Go to the documentation of this file.
1 /*
2  * DirectX Files Functions (D3DXOF.DLL)
3  *
4  * Copyright 2004 Christian Costa
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #include <stdarg.h>
22 #include <string.h>
23 
24 #define COBJMACROS
25 
26 #include "windef.h"
27 #include "winbase.h"
28 #include "winuser.h"
29 #include "winreg.h"
30 #include "winerror.h"
31 
32 #include "ole2.h"
33 #include "rpcproxy.h"
34 #include "uuids.h"
35 
36 #include "d3dxof_private.h"
37 #include "dxfile.h"
38 
39 #include "wine/debug.h"
40 
42 
44 
45 /* For the moment, do nothing here. */
46 BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
47 {
48  switch(fdwReason) {
49  case DLL_PROCESS_ATTACH:
50  instance = hInstDLL;
51  DisableThreadLibraryCalls(hInstDLL);
52  break;
53  }
54  return TRUE;
55 }
56 
57 /******************************************************************************
58  * DirectX File ClassFactory
59  */
60 typedef struct {
61  IClassFactory IClassFactory_iface;
62 
63  LONG ref;
64  HRESULT (*pfnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj);
66 
68 {
69  return CONTAINING_RECORD(iface, IClassFactoryImpl, IClassFactory_iface);
70 }
71 
73 {
74  const CLSID *clsid;
75  HRESULT (*pfnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj);
76 };
77 
78 static const struct object_creation_info object_creation[] =
79 {
80  { &CLSID_CDirectXFile, IDirectXFileImpl_Create },
81 };
82 
83 static HRESULT WINAPI XFCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid, LPVOID *ppobj)
84 {
86 
89  {
90  IClassFactory_AddRef(iface);
91  *ppobj = &This->IClassFactory_iface;
92  return S_OK;
93  }
94 
95  WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
96  return E_NOINTERFACE;
97 }
98 
99 static ULONG WINAPI XFCF_AddRef(LPCLASSFACTORY iface)
100 {
102  return InterlockedIncrement(&This->ref);
103 }
104 
105 static ULONG WINAPI XFCF_Release(LPCLASSFACTORY iface)
106 {
108 
110 
111  if (ref == 0)
113 
114  return ref;
115 }
116 
117 static HRESULT WINAPI XFCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
118 {
120  HRESULT hres;
121  LPUNKNOWN punk;
122 
123  TRACE("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj);
124 
125  *ppobj = NULL;
126  hres = This->pfnCreateInstance(pOuter, (LPVOID *) &punk);
127  if (SUCCEEDED(hres)) {
128  hres = IUnknown_QueryInterface(punk, riid, ppobj);
129  IUnknown_Release(punk);
130  }
131  return hres;
132 }
133 
134 static HRESULT WINAPI XFCF_LockServer(LPCLASSFACTORY iface, BOOL dolock)
135 {
137  FIXME("(%p)->(%d), stub!\n",This,dolock);
138  return S_OK;
139 }
140 
141 static const IClassFactoryVtbl XFCF_Vtbl =
142 {
144  XFCF_AddRef,
145  XFCF_Release,
148 };
149 
150 /***********************************************************************
151  * DirectXFileCreate (D3DXOF.@)
152  */
154 {
155  HRESULT hr;
156 
157  TRACE("(%p)\n", lplpDirectXFile);
158 
159  if (!lplpDirectXFile)
160  return DXFILEERR_BADVALUE;
161 
162  hr = IDirectXFileImpl_Create(NULL, (LPVOID)lplpDirectXFile);
163 
164  if (FAILED(hr))
165  return DXFILEERR_BADALLOC;
166 
167  return S_OK;
168 }
169 
170 /*******************************************************************************
171  * DllGetClassObject [D3DXOF.@]
172  * Retrieves class object from a DLL object
173  *
174  * NOTES
175  * Docs say returns STDAPI
176  *
177  * PARAMS
178  * rclsid [I] CLSID for the class object
179  * riid [I] Reference to identifier of interface for class object
180  * ppv [O] Address of variable to receive interface pointer for riid
181  *
182  * RETURNS
183  * Success: S_OK
184  * Failure: CLASS_E_CLASSNOTAVAILABLE, E_OUTOFMEMORY, E_INVALIDARG,
185  * E_UNEXPECTED
186  */
188 {
189  unsigned int i;
191 
192  TRACE("(%s,%s,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
193 
195  && ! IsEqualGUID( &IID_IUnknown, riid) )
196  return E_NOINTERFACE;
197 
198  for (i = 0; i < ARRAY_SIZE(object_creation); i++)
199  {
200  if (IsEqualGUID(object_creation[i].clsid, rclsid))
201  break;
202  }
203 
204  if (i == ARRAY_SIZE(object_creation))
205  {
206  FIXME("%s: no class found.\n", debugstr_guid(rclsid));
208  }
209 
210  factory = HeapAlloc(GetProcessHeap(), 0, sizeof(*factory));
211  if (factory == NULL) return E_OUTOFMEMORY;
212 
214  factory->ref = 1;
215 
216  factory->pfnCreateInstance = object_creation[i].pfnCreateInstance;
217 
219  return S_OK;
220 }
221 
222 /***********************************************************************
223  * DllCanUnloadNow (D3DXOF.@)
224  */
226 {
227  return S_FALSE;
228 }
229 
230 /***********************************************************************
231  * DllRegisterServer (D3DXOF.@)
232  */
234 {
236 }
237 
238 /***********************************************************************
239  * DllUnregisterServer (D3DXOF.@)
240  */
242 {
244 }
#define HRESULT
Definition: msvc.h:9
#define REFIID
Definition: guiddef.h:113
#define TRUE
Definition: types.h:120
#define E_NOINTERFACE
Definition: winerror.h:2364
static HINSTANCE instance
Definition: main.c:43
HRESULT hr
Definition: shlfolder.c:183
HRESULT __wine_register_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:98
WINE_DEFAULT_DEBUG_CHANNEL(wmic)
REFIID riid
Definition: precomp.h:44
#define REFCLSID
Definition: guiddef.h:112
#define WARN(fmt,...)
Definition: debug.h:111
REFIID LPVOID * ppv
Definition: atlbase.h:39
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
#define DLL_PROCESS_ATTACH
Definition: compat.h:120
#define DXFILEERR_BADVALUE
Definition: dxfile.h:271
const CLSID * clsid
Definition: main.c:70
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:2663
Definition: send.c:47
static ULONG WINAPI XFCF_AddRef(LPCLASSFACTORY iface)
Definition: main.c:99
struct tagIClassFactoryImpl IClassFactoryImpl
HRESULT(* pfnCreateInstance)(IUnknown *pUnkOuter, LPVOID *ppObj)
Definition: main.c:71
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static ULONG WINAPI XFCF_Release(LPCLASSFACTORY iface)
Definition: main.c:105
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
HRESULT WINAPI DllRegisterServer(void)
Definition: main.c:212
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
Definition: main.c:440
static LPUNKNOWN
Definition: ndr_ole.c:49
HRESULT WINAPI DllUnregisterServer(void)
Definition: main.c:220
GLenum GLint ref
Definition: glext.h:6028
#define FIXME(fmt,...)
Definition: debug.h:110
#define S_FALSE
Definition: winerror.h:2357
smooth NULL
Definition: ftsmooth.c:416
static HRESULT WINAPI XFCF_LockServer(LPCLASSFACTORY iface, BOOL dolock)
Definition: main.c:134
static const IClassFactoryVtbl XFCF_Vtbl
Definition: main.c:141
#define debugstr_guid
Definition: kernel32.h:35
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
LONG HRESULT
Definition: typedefs.h:77
const GUID IID_IUnknown
#define WINAPI
Definition: msvc.h:8
unsigned long DWORD
Definition: ntddk_ex.h:95
REFCLSID clsid
Definition: msctf.c:84
#define InterlockedDecrement
Definition: armddk.h:52
HRESULT __wine_unregister_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:110
static HRESULT WINAPI XFCF_QueryInterface(LPCLASSFACTORY iface, REFIID riid, LPVOID *ppobj)
Definition: main.c:83
static HRESULT WINAPI XFCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj)
Definition: main.c:117
#define S_OK
Definition: intsafe.h:59
static const struct object_creation_info object_creation[]
Definition: main.c:78
#define InterlockedIncrement
Definition: armddk.h:53
struct IDirectXFile * LPDIRECTXFILE
Definition: dxfile.h:54
#define ARRAY_SIZE(a)
Definition: main.h:24
HRESULT WINAPI DllCanUnloadNow(void)
Definition: main.c:204
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4021
HRESULT WINAPI DirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile)
Definition: main.c:153
static IClassFactoryImpl * impl_from_IClassFactory(IClassFactory *iface)
Definition: main.c:67
unsigned int ULONG
Definition: retypes.h:1
static ClassFactoryImpl factory
Definition: ole_server.c:234
#define DXFILEERR_BADALLOC
Definition: dxfile.h:274
HRESULT IDirectXFileImpl_Create(IUnknown *pUnkOuter, LPVOID *ppObj)
Definition: d3dxof.c:51
const GUID IID_IClassFactory
IClassFactory IClassFactory_iface
Definition: main.c:442
#define HeapFree(x, y, z)
Definition: compat.h:394
#define SUCCEEDED(hr)
Definition: intsafe.h:57
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: main.c:166
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
Definition: main.c:26