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
25 #include "wine/debug.h"
32 #include "d3dxof_private.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
;
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
);
76 ERR("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppvObject
);
80 static ULONG WINAPI
IDirectXFileImpl_AddRef(IDirectXFile
* iface
)
82 IDirectXFileImpl
*This
= (IDirectXFileImpl
*)iface
;
84 TRACE("(%p/%p)\n", iface
, This
);
90 static ULONG WINAPI
IDirectXFileImpl_Release(IDirectXFile
* iface
)
92 IDirectXFileImpl
*This
= (IDirectXFileImpl
*)iface
;
94 TRACE("(%p/%p)\n", iface
, This
);
97 HeapFree(GetProcessHeap(), 0, This
);
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
;
121 *ppEnumObj
= (LPDIRECTXFILEENUMOBJECT
)object
;
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
);
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
);
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
;
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
);
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
);
200 static ULONG WINAPI
IDirectXFileBinaryImpl_Release(IDirectXFileBinary
* iface
)
202 IDirectXFileBinaryImpl
*This
= (IDirectXFileBinaryImpl
*)iface
;
204 TRACE("(%p/%p)\n", iface
, This
);
207 HeapFree(GetProcessHeap(), 0, This
);
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
);
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
);
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
);
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
);
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
);
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
;
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
);
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
);
318 static ULONG WINAPI
IDirectXFileDataImpl_Release(IDirectXFileData
* iface
)
320 IDirectXFileDataImpl
*This
= (IDirectXFileDataImpl
*)iface
;
322 TRACE("(%p/%p)\n", iface
, This
);
325 HeapFree(GetProcessHeap(), 0, This
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
;
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
);
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
);
466 static ULONG WINAPI
IDirectXFileDataReferenceImpl_Release(IDirectXFileDataReference
* iface
)
468 IDirectXFileDataReferenceImpl
*This
= (IDirectXFileDataReferenceImpl
*)iface
;
470 TRACE("(%p/%p)\n", iface
, This
);
473 HeapFree(GetProcessHeap(), 0, This
);
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
);
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
);
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
);
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
;
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
);
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
);
562 static ULONG WINAPI
IDirectXFileEnumObjectImpl_Release(IDirectXFileEnumObject
* iface
)
564 IDirectXFileEnumObjectImpl
*This
= (IDirectXFileEnumObjectImpl
*)iface
;
566 TRACE("(%p/%p)\n", iface
, This
);
569 HeapFree(GetProcessHeap(), 0, This
);
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
;
587 *ppDataObj
= (LPDIRECTXFILEDATA
)object
;
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
);
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
);
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
;
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
);
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
);
665 static ULONG WINAPI
IDirectXFileObjectImpl_Release(IDirectXFileObject
* iface
)
667 IDirectXFileObjectImpl
*This
= (IDirectXFileObjectImpl
*)iface
;
669 TRACE("(%p/%p)\n", iface
, This
);
672 HeapFree(GetProcessHeap(), 0, This
);
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
);
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
);
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
;
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
);
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
);
750 static ULONG WINAPI
IDirectXFileSaveObjectImpl_Release(IDirectXFileSaveObject
* iface
)
752 IDirectXFileSaveObjectImpl
*This
= (IDirectXFileSaveObjectImpl
*)iface
;
754 TRACE("(%p/%p)\n", iface
, This
);
757 HeapFree(GetProcessHeap(), 0, This
);
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
);
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
);
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
);
789 static IDirectXFileSaveObjectVtbl IDirectXFileSaveObject_Vtbl
=
791 IDirectXFileSaveObjectImpl_QueryInterface
,
792 IDirectXFileSaveObjectImpl_AddRef
,
793 IDirectXFileSaveObjectImpl_Release
,
794 IDirectXFileSaveObjectImpl_SaveTemplates
,
795 IDirectXFileSaveObjectImpl_CreateDataObject
,
796 IDirectXFileSaveObjectImpl_SaveData