Update German resources.
[wine/multimedia.git] / dlls / d3dxof / d3dxof.c
blob0512add416ae12982d1adf8bd8c8ce647c73ea09
1 /*
2 * Implementation of DirectX File Interfaces
4 * Copyright 2004 Christian Costa
6 * This file contains the (internal) driver registration functions,
7 * driver enumeration APIs and DirectDraw creation functions.
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 #include "config.h"
25 #include "wine/debug.h"
27 #define COBJMACROS
29 #include "winbase.h"
30 #include "wingdi.h"
32 #include "d3dxof_private.h"
33 #include "dxfile.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(d3dxof);
37 static struct IDirectXFileVtbl IDirectXFile_Vtbl;
38 static struct IDirectXFileBinaryVtbl IDirectXFileBinary_Vtbl;
39 static struct IDirectXFileDataVtbl IDirectXFileData_Vtbl;
40 static struct IDirectXFileDataReferenceVtbl IDirectXFileDataReference_Vtbl;
41 static struct IDirectXFileEnumObjectVtbl IDirectXFileEnumObject_Vtbl;
42 static struct IDirectXFileObjectVtbl IDirectXFileObject_Vtbl;
43 static struct IDirectXFileSaveObjectVtbl IDirectXFileSaveObject_Vtbl;
45 HRESULT IDirectXFileImpl_Create(IUnknown* pUnkOuter, LPVOID* ppObj)
47 IDirectXFileImpl* object;
49 TRACE("(%p,%p)\n", pUnkOuter, ppObj);
51 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileImpl));
53 object->lpVtbl.lpVtbl = &IDirectXFile_Vtbl;
54 object->ref = 1;
56 *ppObj = object;
58 return S_OK;
61 /*** IUnknown methods ***/
62 static HRESULT WINAPI IDirectXFileImpl_QueryInterface(IDirectXFile* iface, REFIID riid, void** ppvObject)
64 IDirectXFileImpl *This = (IDirectXFileImpl *)iface;
66 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
68 if (IsEqualGUID(riid, &IID_IUnknown)
69 || IsEqualGUID(riid, &IID_IDirectXFile))
71 IClassFactory_AddRef(iface);
72 *ppvObject = This;
73 return S_OK;
76 ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
77 return E_NOINTERFACE;
80 static ULONG WINAPI IDirectXFileImpl_AddRef(IDirectXFile* iface)
82 IDirectXFileImpl *This = (IDirectXFileImpl *)iface;
84 TRACE("(%p/%p)\n", iface, This);
86 This->ref++;
87 return S_OK;
90 static ULONG WINAPI IDirectXFileImpl_Release(IDirectXFile* iface)
92 IDirectXFileImpl *This = (IDirectXFileImpl *)iface;
94 TRACE("(%p/%p)\n", iface, This);
96 if (!--This->ref)
97 HeapFree(GetProcessHeap(), 0, This);
99 return S_OK;
102 /*** IDirectXFile methods ***/
103 static HRESULT WINAPI IDirectXFileImpl_CreateEnumObject(IDirectXFile* iface, LPVOID pvSource, DXFILELOADOPTIONS dwLoadOptions, LPDIRECTXFILEENUMOBJECT* ppEnumObj)
106 IDirectXFileImpl *This = (IDirectXFileImpl *)iface;
107 IDirectXFileEnumObjectImpl* object;
109 FIXME("(%p/%p)->(%p,%lx,%p) stub!\n", This, iface, pvSource, dwLoadOptions, ppEnumObj);
111 if (dwLoadOptions == 0)
113 FIXME("Source is a file '%s'\n", (char*)pvSource);
116 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileEnumObjectImpl));
118 object->lpVtbl.lpVtbl = &IDirectXFileEnumObject_Vtbl;
119 object->ref = 1;
121 *ppEnumObj = (LPDIRECTXFILEENUMOBJECT)object;
123 return S_FALSE;
126 static HRESULT WINAPI IDirectXFileImpl_CreateSaveObject(IDirectXFile* iface, LPCSTR szFileName, DXFILEFORMAT dwFileFormat, LPDIRECTXFILESAVEOBJECT* ppSaveObj)
128 IDirectXFileImpl *This = (IDirectXFileImpl *)iface;
130 FIXME("(%p/%p)->(%s,%lx,%p) stub!\n", This, iface, szFileName, dwFileFormat, ppSaveObj);
132 return S_FALSE;
135 static HRESULT WINAPI IDirectXFileImpl_RegisterTemplates(IDirectXFile* iface, LPVOID pvData, DWORD cbSize)
137 IDirectXFileImpl *This = (IDirectXFileImpl *)iface;
139 FIXME("(%p/%p)->(%p,%ld) stub!\n", This, iface, pvData, cbSize);
141 return S_FALSE;
144 static IDirectXFileVtbl IDirectXFile_Vtbl =
146 IDirectXFileImpl_QueryInterface,
147 IDirectXFileImpl_AddRef,
148 IDirectXFileImpl_Release,
149 IDirectXFileImpl_CreateEnumObject,
150 IDirectXFileImpl_CreateSaveObject,
151 IDirectXFileImpl_RegisterTemplates
154 HRESULT IDirectXFileBinaryImpl_Create(IDirectXFileBinaryImpl** ppObj)
156 IDirectXFileBinaryImpl* object;
158 TRACE("(%p)\n", ppObj);
160 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileBinaryImpl));
162 object->lpVtbl.lpVtbl = &IDirectXFileBinary_Vtbl;
163 object->ref = 1;
165 *ppObj = object;
167 return S_OK;
170 /*** IUnknown methods ***/
171 static HRESULT WINAPI IDirectXFileBinaryImpl_QueryInterface(IDirectXFileBinary* iface, REFIID riid, void** ppvObject)
173 IDirectXFileBinaryImpl *This = (IDirectXFileBinaryImpl *)iface;
175 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
177 if (IsEqualGUID(riid, &IID_IUnknown)
178 || IsEqualGUID(riid, &IID_IDirectXFileObject)
179 || IsEqualGUID(riid, &IID_IDirectXFileBinary))
181 IClassFactory_AddRef(iface);
182 *ppvObject = This;
183 return S_OK;
186 ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
187 return E_NOINTERFACE;
190 static ULONG WINAPI IDirectXFileBinaryImpl_AddRef(IDirectXFileBinary* iface)
192 IDirectXFileBinaryImpl *This = (IDirectXFileBinaryImpl *)iface;
194 TRACE("(%p/%p)\n", iface, This);
196 This->ref++;
197 return S_OK;
200 static ULONG WINAPI IDirectXFileBinaryImpl_Release(IDirectXFileBinary* iface)
202 IDirectXFileBinaryImpl *This = (IDirectXFileBinaryImpl *)iface;
204 TRACE("(%p/%p)\n", iface, This);
206 if (!--This->ref)
207 HeapFree(GetProcessHeap(), 0, This);
209 return S_OK;
212 /*** IDirectXFileObject methods ***/
213 static HRESULT WINAPI IDirectXFileBinaryImpl_GetName(IDirectXFileBinary* iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen)
216 IDirectXFileBinaryImpl *This = (IDirectXFileBinaryImpl *)iface;
218 FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pstrNameBuf, pdwBufLen);
220 return S_FALSE;
223 static HRESULT WINAPI IDirectXFileBinaryImpl_GetId(IDirectXFileBinary* iface, LPGUID pGuid)
225 IDirectXFileBinaryImpl *This = (IDirectXFileBinaryImpl *)iface;
227 FIXME("(%p/%p)->(%p) stub!\n", This, iface, pGuid);
229 return S_FALSE;
232 /*** IDirectXFileBinary methods ***/
233 static HRESULT WINAPI IDirectXFileBinaryImpl_GetSize(IDirectXFileBinary* iface, DWORD* pcbSize)
235 IDirectXFileBinaryImpl *This = (IDirectXFileBinaryImpl *)iface;
237 FIXME("(%p/%p)->(%p) stub!\n", This, iface, pcbSize);
239 return S_FALSE;
242 static HRESULT WINAPI IDirectXFileBinaryImpl_GetMimeType(IDirectXFileBinary* iface, LPCSTR* pszMimeType)
244 IDirectXFileBinaryImpl *This = (IDirectXFileBinaryImpl *)iface;
246 FIXME("(%p/%p)->(%p) stub!\n", This, iface, pszMimeType);
248 return S_FALSE;
251 static HRESULT WINAPI IDirectXFileBinaryImpl_Read(IDirectXFileBinary* iface, LPVOID pvData, DWORD cbSize, LPDWORD pcbRead)
253 IDirectXFileBinaryImpl *This = (IDirectXFileBinaryImpl *)iface;
255 FIXME("(%p/%p)->(%p, %ld, %p) stub!\n", This, iface, pvData, cbSize, pcbRead);
257 return S_FALSE;
260 static IDirectXFileBinaryVtbl IDirectXFileBinary_Vtbl =
262 IDirectXFileBinaryImpl_QueryInterface,
263 IDirectXFileBinaryImpl_AddRef,
264 IDirectXFileBinaryImpl_Release,
265 IDirectXFileBinaryImpl_GetName,
266 IDirectXFileBinaryImpl_GetId,
267 IDirectXFileBinaryImpl_GetSize,
268 IDirectXFileBinaryImpl_GetMimeType,
269 IDirectXFileBinaryImpl_Read
272 HRESULT IDirectXFileDataImpl_Create(IDirectXFileDataImpl** ppObj)
274 IDirectXFileDataImpl* object;
276 TRACE("(%p)\n", ppObj);
278 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileDataImpl));
280 object->lpVtbl.lpVtbl = &IDirectXFileData_Vtbl;
281 object->ref = 1;
283 *ppObj = object;
285 return S_OK;
288 /*** IUnknown methods ***/
289 static HRESULT WINAPI IDirectXFileDataImpl_QueryInterface(IDirectXFileData* iface, REFIID riid, void** ppvObject)
291 IDirectXFileDataImpl *This = (IDirectXFileDataImpl *)iface;
293 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
295 if (IsEqualGUID(riid, &IID_IUnknown)
296 || IsEqualGUID(riid, &IID_IDirectXFileObject)
297 || IsEqualGUID(riid, &IID_IDirectXFileData))
299 IClassFactory_AddRef(iface);
300 *ppvObject = This;
301 return S_OK;
304 ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
305 return E_NOINTERFACE;
308 static ULONG WINAPI IDirectXFileDataImpl_AddRef(IDirectXFileData* iface)
310 IDirectXFileDataImpl *This = (IDirectXFileDataImpl *)iface;
312 TRACE("(%p/%p)\n", iface, This);
314 This->ref++;
315 return S_OK;
318 static ULONG WINAPI IDirectXFileDataImpl_Release(IDirectXFileData* iface)
320 IDirectXFileDataImpl *This = (IDirectXFileDataImpl *)iface;
322 TRACE("(%p/%p)\n", iface, This);
324 if (!--This->ref)
325 HeapFree(GetProcessHeap(), 0, This);
327 return S_OK;
330 /*** IDirectXFileObject methods ***/
331 static HRESULT WINAPI IDirectXFileDataImpl_GetName(IDirectXFileData* iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen)
334 IDirectXFileDataImpl *This = (IDirectXFileDataImpl *)iface;
336 FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pstrNameBuf, pdwBufLen);
338 return S_FALSE;
341 static HRESULT WINAPI IDirectXFileDataImpl_GetId(IDirectXFileData* iface, LPGUID pGuid)
343 IDirectXFileDataImpl *This = (IDirectXFileDataImpl *)iface;
345 FIXME("(%p/%p)->(%p) stub!\n", This, iface, pGuid);
347 return S_FALSE;
350 /*** IDirectXFileData methods ***/
351 static HRESULT WINAPI IDirectXFileDataImpl_GetData(IDirectXFileData* iface, LPCSTR szMember, DWORD* pcbSize, void** ppvData)
353 IDirectXFileDataImpl *This = (IDirectXFileDataImpl *)iface;
355 FIXME("(%p/%p)->(%s,%p,%p) stub!\n", This, iface, szMember, pcbSize, ppvData);
357 return S_FALSE;
360 static HRESULT WINAPI IDirectXFileDataImpl_GetType(IDirectXFileData* iface, const GUID** pguid)
362 IDirectXFileDataImpl *This = (IDirectXFileDataImpl *)iface;
364 FIXME("(%p/%p)->(%p) stub!\n", This, iface, pguid);
366 return S_FALSE;
369 static HRESULT WINAPI IDirectXFileDataImpl_GetNextObject(IDirectXFileData* iface, LPDIRECTXFILEOBJECT* ppChildObj)
371 IDirectXFileDataImpl *This = (IDirectXFileDataImpl *)iface;
373 FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppChildObj);
375 return S_FALSE;
378 static HRESULT WINAPI IDirectXFileDataImpl_AddDataObject(IDirectXFileData* iface, LPDIRECTXFILEDATA pDataObj)
380 IDirectXFileDataImpl *This = (IDirectXFileDataImpl *)iface;
382 FIXME("(%p/%p)->(%p) stub!\n", This, iface, pDataObj);
384 return S_FALSE;
387 static HRESULT WINAPI IDirectXFileDataImpl_AddDataReference(IDirectXFileData* iface, LPCSTR szRef, const GUID* pguidRef)
389 IDirectXFileDataImpl *This = (IDirectXFileDataImpl *)iface;
391 FIXME("(%p/%p)->(%s,%p) stub!\n", This, iface, szRef, pguidRef);
393 return S_FALSE;
396 static HRESULT WINAPI IDirectXFileDataImpl_AddBinaryObject(IDirectXFileData* iface, LPCSTR szName, const GUID* pguid, LPCSTR szMimeType, LPVOID pvData, DWORD cbSize)
398 IDirectXFileDataImpl *This = (IDirectXFileDataImpl *)iface;
400 FIXME("(%p/%p)->(%s,%p,%s,%p,%ld) stub!\n", This, iface, szName, pguid, szMimeType, pvData, cbSize);
402 return S_FALSE;
405 static IDirectXFileDataVtbl IDirectXFileData_Vtbl =
407 IDirectXFileDataImpl_QueryInterface,
408 IDirectXFileDataImpl_AddRef,
409 IDirectXFileDataImpl_Release,
410 IDirectXFileDataImpl_GetName,
411 IDirectXFileDataImpl_GetId,
412 IDirectXFileDataImpl_GetData,
413 IDirectXFileDataImpl_GetType,
414 IDirectXFileDataImpl_GetNextObject,
415 IDirectXFileDataImpl_AddDataObject,
416 IDirectXFileDataImpl_AddDataReference,
417 IDirectXFileDataImpl_AddBinaryObject
420 HRESULT IDirectXFileDataReferenceImpl_Create(IDirectXFileDataReferenceImpl** ppObj)
422 IDirectXFileDataReferenceImpl* object;
424 TRACE("(%p)\n", ppObj);
426 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileDataReferenceImpl));
428 object->lpVtbl.lpVtbl = &IDirectXFileDataReference_Vtbl;
429 object->ref = 1;
431 *ppObj = object;
433 return S_OK;
436 /*** IUnknown methods ***/
437 static HRESULT WINAPI IDirectXFileDataReferenceImpl_QueryInterface(IDirectXFileDataReference* iface, REFIID riid, void** ppvObject)
439 IDirectXFileDataReferenceImpl *This = (IDirectXFileDataReferenceImpl *)iface;
441 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
443 if (IsEqualGUID(riid, &IID_IUnknown)
444 || IsEqualGUID(riid, &IID_IDirectXFileObject)
445 || IsEqualGUID(riid, &IID_IDirectXFileDataReference))
447 IClassFactory_AddRef(iface);
448 *ppvObject = This;
449 return S_OK;
452 ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
453 return E_NOINTERFACE;
456 static ULONG WINAPI IDirectXFileDataReferenceImpl_AddRef(IDirectXFileDataReference* iface)
458 IDirectXFileDataReferenceImpl *This = (IDirectXFileDataReferenceImpl *)iface;
460 TRACE("(%p/%p)\n", iface, This);
462 This->ref++;
463 return S_OK;
466 static ULONG WINAPI IDirectXFileDataReferenceImpl_Release(IDirectXFileDataReference* iface)
468 IDirectXFileDataReferenceImpl *This = (IDirectXFileDataReferenceImpl *)iface;
470 TRACE("(%p/%p)\n", iface, This);
472 if (!--This->ref)
473 HeapFree(GetProcessHeap(), 0, This);
475 return S_OK;
478 /*** IDirectXFileObject methods ***/
479 static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetName(IDirectXFileDataReference* iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen)
481 IDirectXFileDataReferenceImpl *This = (IDirectXFileDataReferenceImpl *)iface;
483 FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pstrNameBuf, pdwBufLen);
485 return S_FALSE;
488 static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetId(IDirectXFileDataReference* iface, LPGUID pGuid)
490 IDirectXFileDataReferenceImpl *This = (IDirectXFileDataReferenceImpl *)iface;
492 FIXME("(%p/%p)->(%p) stub!\n", This, iface, pGuid);
494 return S_FALSE;
497 /*** IDirectXFileDataReference ***/
498 static HRESULT WINAPI IDirectXFileDataReferenceImpl_Resolve(IDirectXFileDataReference* iface, LPDIRECTXFILEDATA* ppDataObj)
500 IDirectXFileDataReferenceImpl *This = (IDirectXFileDataReferenceImpl *)iface;
502 FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppDataObj);
504 return S_FALSE;
507 static IDirectXFileDataReferenceVtbl IDirectXFileDataReference_Vtbl =
509 IDirectXFileDataReferenceImpl_QueryInterface,
510 IDirectXFileDataReferenceImpl_AddRef,
511 IDirectXFileDataReferenceImpl_Release,
512 IDirectXFileDataReferenceImpl_GetName,
513 IDirectXFileDataReferenceImpl_GetId,
514 IDirectXFileDataReferenceImpl_Resolve
517 HRESULT IDirectXFileEnumObjectImpl_Create(IDirectXFileEnumObjectImpl** ppObj)
519 IDirectXFileEnumObjectImpl* object;
521 TRACE("(%p)\n", ppObj);
523 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileEnumObjectImpl));
525 object->lpVtbl.lpVtbl = &IDirectXFileEnumObject_Vtbl;
526 object->ref = 1;
528 *ppObj = object;
530 return S_OK;
533 /*** IUnknown methods ***/
534 static HRESULT WINAPI IDirectXFileEnumObjectImpl_QueryInterface(IDirectXFileEnumObject* iface, REFIID riid, void** ppvObject)
536 IDirectXFileEnumObjectImpl *This = (IDirectXFileEnumObjectImpl *)iface;
538 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
540 if (IsEqualGUID(riid, &IID_IUnknown)
541 || IsEqualGUID(riid, &IID_IDirectXFileEnumObject))
543 IClassFactory_AddRef(iface);
544 *ppvObject = This;
545 return S_OK;
548 ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
549 return E_NOINTERFACE;
552 static ULONG WINAPI IDirectXFileEnumObjectImpl_AddRef(IDirectXFileEnumObject* iface)
554 IDirectXFileEnumObjectImpl *This = (IDirectXFileEnumObjectImpl *)iface;
556 TRACE("(%p/%p)\n", iface, This);
558 This->ref++;
559 return S_OK;
562 static ULONG WINAPI IDirectXFileEnumObjectImpl_Release(IDirectXFileEnumObject* iface)
564 IDirectXFileEnumObjectImpl *This = (IDirectXFileEnumObjectImpl *)iface;
566 TRACE("(%p/%p)\n", iface, This);
568 if (!--This->ref)
569 HeapFree(GetProcessHeap(), 0, This);
571 return S_OK;
574 /*** IDirectXFileEnumObject methods ***/
575 static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetNextDataObject(IDirectXFileEnumObject* iface, LPDIRECTXFILEDATA* ppDataObj)
577 IDirectXFileEnumObjectImpl *This = (IDirectXFileEnumObjectImpl *)iface;
578 IDirectXFileDataImpl* object;
580 FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppDataObj);
582 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileDataImpl));
584 object->lpVtbl.lpVtbl = &IDirectXFileData_Vtbl;
585 object->ref = 1;
587 *ppDataObj = (LPDIRECTXFILEDATA)object;
589 return S_FALSE;
592 static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetDataObjectById(IDirectXFileEnumObject* iface, REFGUID rguid, LPDIRECTXFILEDATA* ppDataObj)
594 IDirectXFileEnumObjectImpl *This = (IDirectXFileEnumObjectImpl *)iface;
596 FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, rguid, ppDataObj);
598 return S_FALSE;
601 static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetDataObjectByName(IDirectXFileEnumObject* iface, LPCSTR szName, LPDIRECTXFILEDATA* ppDataObj)
603 IDirectXFileEnumObjectImpl *This = (IDirectXFileEnumObjectImpl *)iface;
605 FIXME("(%p/%p)->(%s,%p) stub!\n", This, iface, szName, ppDataObj);
607 return S_FALSE;
610 static IDirectXFileEnumObjectVtbl IDirectXFileEnumObject_Vtbl =
612 IDirectXFileEnumObjectImpl_QueryInterface,
613 IDirectXFileEnumObjectImpl_AddRef,
614 IDirectXFileEnumObjectImpl_Release,
615 IDirectXFileEnumObjectImpl_GetNextDataObject,
616 IDirectXFileEnumObjectImpl_GetDataObjectById,
617 IDirectXFileEnumObjectImpl_GetDataObjectByName
620 HRESULT IDirectXFileObjectImpl_Create(IDirectXFileObjectImpl** ppObj)
622 IDirectXFileObjectImpl* object;
624 TRACE("(%p)\n", ppObj);
626 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileObjectImpl));
628 object->lpVtbl.lpVtbl = &IDirectXFileObject_Vtbl;
629 object->ref = 1;
631 *ppObj = object;
633 return S_OK;
636 /*** IUnknown methods ***/
637 static HRESULT WINAPI IDirectXFileObjectImpl_QueryInterface(IDirectXFileObject* iface, REFIID riid, void** ppvObject)
639 IDirectXFileObjectImpl *This = (IDirectXFileObjectImpl *)iface;
641 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
643 if (IsEqualGUID(riid, &IID_IUnknown)
644 || IsEqualGUID(riid, &IID_IDirectXFileObject))
646 IClassFactory_AddRef(iface);
647 *ppvObject = This;
648 return S_OK;
651 ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
652 return E_NOINTERFACE;
655 static ULONG WINAPI IDirectXFileObjectImpl_AddRef(IDirectXFileObject* iface)
657 IDirectXFileObjectImpl *This = (IDirectXFileObjectImpl *)iface;
659 TRACE("(%p/%p)\n", iface, This);
661 This->ref++;
662 return S_OK;
665 static ULONG WINAPI IDirectXFileObjectImpl_Release(IDirectXFileObject* iface)
667 IDirectXFileObjectImpl *This = (IDirectXFileObjectImpl *)iface;
669 TRACE("(%p/%p)\n", iface, This);
671 if (!--This->ref)
672 HeapFree(GetProcessHeap(), 0, This);
674 return S_OK;
677 /*** IDirectXFileObject methods ***/
678 static HRESULT WINAPI IDirectXFileObjectImpl_GetName(IDirectXFileObject* iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen)
680 IDirectXFileDataReferenceImpl *This = (IDirectXFileDataReferenceImpl *)iface;
682 FIXME("(%p/%p)->(%p,%p) stub!\n", This, iface, pstrNameBuf, pdwBufLen);
684 return S_FALSE;
687 static HRESULT WINAPI IDirectXFileObjectImpl_GetId(IDirectXFileObject* iface, LPGUID pGuid)
689 IDirectXFileObjectImpl *This = (IDirectXFileObjectImpl *)iface;
691 FIXME("(%p/%p)->(%p) stub!\n", This, iface, pGuid);
693 return S_FALSE;
696 static IDirectXFileObjectVtbl IDirectXFileObject_Vtbl =
698 IDirectXFileObjectImpl_QueryInterface,
699 IDirectXFileObjectImpl_AddRef,
700 IDirectXFileObjectImpl_Release,
701 IDirectXFileObjectImpl_GetName,
702 IDirectXFileObjectImpl_GetId
705 HRESULT IDirectXFileSaveObjectImpl_Create(IDirectXFileSaveObjectImpl** ppObj)
707 IDirectXFileSaveObjectImpl* object;
709 TRACE("(%p)\n", ppObj);
711 object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectXFileSaveObjectImpl));
713 object->lpVtbl.lpVtbl = &IDirectXFileSaveObject_Vtbl;
714 object->ref = 1;
716 *ppObj = object;
718 return S_OK;
721 /*** IUnknown methods ***/
722 static HRESULT WINAPI IDirectXFileSaveObjectImpl_QueryInterface(IDirectXFileSaveObject* iface, REFIID riid, void** ppvObject)
724 IDirectXFileSaveObjectImpl *This = (IDirectXFileSaveObjectImpl *)iface;
726 TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject);
728 if (IsEqualGUID(riid, &IID_IUnknown)
729 || IsEqualGUID(riid, &IID_IDirectXFileSaveObject))
731 IClassFactory_AddRef(iface);
732 *ppvObject = This;
733 return S_OK;
736 ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject);
737 return E_NOINTERFACE;
740 static ULONG WINAPI IDirectXFileSaveObjectImpl_AddRef(IDirectXFileSaveObject* iface)
742 IDirectXFileSaveObjectImpl *This = (IDirectXFileSaveObjectImpl *)iface;
744 TRACE("(%p/%p)\n", iface, This);
746 This->ref++;
747 return S_OK;
750 static ULONG WINAPI IDirectXFileSaveObjectImpl_Release(IDirectXFileSaveObject* iface)
752 IDirectXFileSaveObjectImpl *This = (IDirectXFileSaveObjectImpl *)iface;
754 TRACE("(%p/%p)\n", iface, This);
756 if (!--This->ref)
757 HeapFree(GetProcessHeap(), 0, This);
759 return S_OK;
762 static HRESULT WINAPI IDirectXFileSaveObjectImpl_SaveTemplates(IDirectXFileSaveObject* iface, DWORD cTemplates, const GUID** ppguidTemplates)
764 IDirectXFileSaveObjectImpl *This = (IDirectXFileSaveObjectImpl *)iface;
766 FIXME("(%p/%p)->(%ld,%p) stub!\n", This, iface, cTemplates, ppguidTemplates);
768 return S_FALSE;
771 static HRESULT WINAPI IDirectXFileSaveObjectImpl_CreateDataObject(IDirectXFileSaveObject* iface, REFGUID rguidTemplate, LPCSTR szName, const GUID* pguid, DWORD cbSize, LPVOID pvData, LPDIRECTXFILEDATA* ppDataObj)
773 IDirectXFileSaveObjectImpl *This = (IDirectXFileSaveObjectImpl *)iface;
775 FIXME("(%p/%p)->(%p,%s,%p,%ld,%p,%p) stub!\n", This, iface, rguidTemplate, szName, pguid, cbSize, pvData, ppDataObj);
777 return S_FALSE;
780 static HRESULT WINAPI IDirectXFileSaveObjectImpl_SaveData(IDirectXFileSaveObject* iface, LPDIRECTXFILEDATA ppDataObj)
782 IDirectXFileSaveObjectImpl *This = (IDirectXFileSaveObjectImpl *)iface;
784 FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppDataObj);
786 return S_FALSE;
789 static IDirectXFileSaveObjectVtbl IDirectXFileSaveObject_Vtbl =
791 IDirectXFileSaveObjectImpl_QueryInterface,
792 IDirectXFileSaveObjectImpl_AddRef,
793 IDirectXFileSaveObjectImpl_Release,
794 IDirectXFileSaveObjectImpl_SaveTemplates,
795 IDirectXFileSaveObjectImpl_CreateDataObject,
796 IDirectXFileSaveObjectImpl_SaveData