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"
30 #include "d3dxof_private.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(d3dxof
);
35 static struct IDirectXFileVtbl IDirectXFile_Vtbl
;
36 static struct IDirectXFileBinaryVtbl IDirectXFileBinary_Vtbl
;
37 static struct IDirectXFileDataVtbl IDirectXFileData_Vtbl
;
38 static struct IDirectXFileDataReferenceVtbl IDirectXFileDataReference_Vtbl
;
39 static struct IDirectXFileEnumObjectVtbl IDirectXFileEnumObject_Vtbl
;
40 static struct IDirectXFileObjectVtbl IDirectXFileObject_Vtbl
;
41 static struct IDirectXFileSaveObjectVtbl IDirectXFileSaveObject_Vtbl
;
43 HRESULT
IDirectXFileImpl_Create(IUnknown
* pUnkOuter
, LPVOID
* ppObj
)
45 IDirectXFileImpl
* object
;
47 TRACE("(%p,%p)\n", pUnkOuter
, ppObj
);
49 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectXFileImpl
));
51 object
->lpVtbl
.lpVtbl
= &IDirectXFile_Vtbl
;
59 /*** IUnknown methods ***/
60 static HRESULT WINAPI
IDirectXFileImpl_QueryInterface(IDirectXFile
* iface
, REFIID riid
, void** ppvObject
)
62 IDirectXFileImpl
*This
= (IDirectXFileImpl
*)iface
;
64 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ppvObject
);
66 if (IsEqualGUID(riid
, &IID_IUnknown
)
67 || IsEqualGUID(riid
, &IID_IDirectXFile
))
69 IClassFactory_AddRef(iface
);
74 ERR("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppvObject
);
78 static ULONG WINAPI
IDirectXFileImpl_AddRef(IDirectXFile
* iface
)
80 IDirectXFileImpl
*This
= (IDirectXFileImpl
*)iface
;
82 TRACE("(%p/%p)\n", iface
, This
);
88 static ULONG WINAPI
IDirectXFileImpl_Release(IDirectXFile
* iface
)
90 IDirectXFileImpl
*This
= (IDirectXFileImpl
*)iface
;
92 TRACE("(%p/%p)\n", iface
, This
);
95 HeapFree(GetProcessHeap(), 0, This
);
100 /*** IDirectXFile methods ***/
101 static HRESULT WINAPI
IDirectXFileImpl_CreateEnumObject(IDirectXFile
* iface
, LPVOID pvSource
, DXFILELOADOPTIONS dwLoadOptions
, LPDIRECTXFILEENUMOBJECT
* ppEnumObj
)
104 IDirectXFileImpl
*This
= (IDirectXFileImpl
*)iface
;
105 IDirectXFileEnumObjectImpl
* object
;
107 FIXME("(%p/%p)->(%p,%lx,%p) stub!\n", This
, iface
, pvSource
, dwLoadOptions
, ppEnumObj
);
109 if (dwLoadOptions
== 0)
111 FIXME("Source is a file '%s'\n", (char*)pvSource
);
114 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectXFileEnumObjectImpl
));
116 object
->lpVtbl
.lpVtbl
= &IDirectXFileEnumObject_Vtbl
;
119 *ppEnumObj
= (LPDIRECTXFILEENUMOBJECT
)object
;
124 static HRESULT WINAPI
IDirectXFileImpl_CreateSaveObject(IDirectXFile
* iface
, LPCSTR szFileName
, DXFILEFORMAT dwFileFormat
, LPDIRECTXFILESAVEOBJECT
* ppSaveObj
)
126 IDirectXFileImpl
*This
= (IDirectXFileImpl
*)iface
;
128 FIXME("(%p/%p)->(%s,%lx,%p) stub!\n", This
, iface
, szFileName
, dwFileFormat
, ppSaveObj
);
133 static HRESULT WINAPI
IDirectXFileImpl_RegisterTemplates(IDirectXFile
* iface
, LPVOID pvData
, DWORD cbSize
)
135 IDirectXFileImpl
*This
= (IDirectXFileImpl
*)iface
;
137 FIXME("(%p/%p)->(%p,%ld) stub!\n", This
, iface
, pvData
, cbSize
);
142 static IDirectXFileVtbl IDirectXFile_Vtbl
=
144 IDirectXFileImpl_QueryInterface
,
145 IDirectXFileImpl_AddRef
,
146 IDirectXFileImpl_Release
,
147 IDirectXFileImpl_CreateEnumObject
,
148 IDirectXFileImpl_CreateSaveObject
,
149 IDirectXFileImpl_RegisterTemplates
152 HRESULT
IDirectXFileBinaryImpl_Create(IDirectXFileBinaryImpl
** ppObj
)
154 IDirectXFileBinaryImpl
* object
;
156 TRACE("(%p)\n", ppObj
);
158 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectXFileBinaryImpl
));
160 object
->lpVtbl
.lpVtbl
= &IDirectXFileBinary_Vtbl
;
168 /*** IUnknown methods ***/
169 static HRESULT WINAPI
IDirectXFileBinaryImpl_QueryInterface(IDirectXFileBinary
* iface
, REFIID riid
, void** ppvObject
)
171 IDirectXFileBinaryImpl
*This
= (IDirectXFileBinaryImpl
*)iface
;
173 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ppvObject
);
175 if (IsEqualGUID(riid
, &IID_IUnknown
)
176 || IsEqualGUID(riid
, &IID_IDirectXFileObject
)
177 || IsEqualGUID(riid
, &IID_IDirectXFileBinary
))
179 IClassFactory_AddRef(iface
);
184 ERR("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppvObject
);
185 return E_NOINTERFACE
;
188 static ULONG WINAPI
IDirectXFileBinaryImpl_AddRef(IDirectXFileBinary
* iface
)
190 IDirectXFileBinaryImpl
*This
= (IDirectXFileBinaryImpl
*)iface
;
192 TRACE("(%p/%p)\n", iface
, This
);
198 static ULONG WINAPI
IDirectXFileBinaryImpl_Release(IDirectXFileBinary
* iface
)
200 IDirectXFileBinaryImpl
*This
= (IDirectXFileBinaryImpl
*)iface
;
202 TRACE("(%p/%p)\n", iface
, This
);
205 HeapFree(GetProcessHeap(), 0, This
);
210 /*** IDirectXFileObject methods ***/
211 static HRESULT WINAPI
IDirectXFileBinaryImpl_GetName(IDirectXFileBinary
* iface
, LPSTR pstrNameBuf
, LPDWORD pdwBufLen
)
214 IDirectXFileBinaryImpl
*This
= (IDirectXFileBinaryImpl
*)iface
;
216 FIXME("(%p/%p)->(%p,%p) stub!\n", This
, iface
, pstrNameBuf
, pdwBufLen
);
221 static HRESULT WINAPI
IDirectXFileBinaryImpl_GetId(IDirectXFileBinary
* iface
, LPGUID pGuid
)
223 IDirectXFileBinaryImpl
*This
= (IDirectXFileBinaryImpl
*)iface
;
225 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, pGuid
);
230 /*** IDirectXFileBinary methods ***/
231 static HRESULT WINAPI
IDirectXFileBinaryImpl_GetSize(IDirectXFileBinary
* iface
, DWORD
* pcbSize
)
233 IDirectXFileBinaryImpl
*This
= (IDirectXFileBinaryImpl
*)iface
;
235 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, pcbSize
);
240 static HRESULT WINAPI
IDirectXFileBinaryImpl_GetMimeType(IDirectXFileBinary
* iface
, LPCSTR
* pszMimeType
)
242 IDirectXFileBinaryImpl
*This
= (IDirectXFileBinaryImpl
*)iface
;
244 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, pszMimeType
);
249 static HRESULT WINAPI
IDirectXFileBinaryImpl_Read(IDirectXFileBinary
* iface
, LPVOID pvData
, DWORD cbSize
, LPDWORD pcbRead
)
251 IDirectXFileBinaryImpl
*This
= (IDirectXFileBinaryImpl
*)iface
;
253 FIXME("(%p/%p)->(%p, %ld, %p) stub!\n", This
, iface
, pvData
, cbSize
, pcbRead
);
258 static IDirectXFileBinaryVtbl IDirectXFileBinary_Vtbl
=
260 IDirectXFileBinaryImpl_QueryInterface
,
261 IDirectXFileBinaryImpl_AddRef
,
262 IDirectXFileBinaryImpl_Release
,
263 IDirectXFileBinaryImpl_GetName
,
264 IDirectXFileBinaryImpl_GetId
,
265 IDirectXFileBinaryImpl_GetSize
,
266 IDirectXFileBinaryImpl_GetMimeType
,
267 IDirectXFileBinaryImpl_Read
270 HRESULT
IDirectXFileDataImpl_Create(IDirectXFileDataImpl
** ppObj
)
272 IDirectXFileDataImpl
* object
;
274 TRACE("(%p)\n", ppObj
);
276 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectXFileDataImpl
));
278 object
->lpVtbl
.lpVtbl
= &IDirectXFileData_Vtbl
;
286 /*** IUnknown methods ***/
287 static HRESULT WINAPI
IDirectXFileDataImpl_QueryInterface(IDirectXFileData
* iface
, REFIID riid
, void** ppvObject
)
289 IDirectXFileDataImpl
*This
= (IDirectXFileDataImpl
*)iface
;
291 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ppvObject
);
293 if (IsEqualGUID(riid
, &IID_IUnknown
)
294 || IsEqualGUID(riid
, &IID_IDirectXFileObject
)
295 || IsEqualGUID(riid
, &IID_IDirectXFileData
))
297 IClassFactory_AddRef(iface
);
302 ERR("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppvObject
);
303 return E_NOINTERFACE
;
306 static ULONG WINAPI
IDirectXFileDataImpl_AddRef(IDirectXFileData
* iface
)
308 IDirectXFileDataImpl
*This
= (IDirectXFileDataImpl
*)iface
;
310 TRACE("(%p/%p)\n", iface
, This
);
316 static ULONG WINAPI
IDirectXFileDataImpl_Release(IDirectXFileData
* iface
)
318 IDirectXFileDataImpl
*This
= (IDirectXFileDataImpl
*)iface
;
320 TRACE("(%p/%p)\n", iface
, This
);
323 HeapFree(GetProcessHeap(), 0, This
);
328 /*** IDirectXFileObject methods ***/
329 static HRESULT WINAPI
IDirectXFileDataImpl_GetName(IDirectXFileData
* iface
, LPSTR pstrNameBuf
, LPDWORD pdwBufLen
)
332 IDirectXFileDataImpl
*This
= (IDirectXFileDataImpl
*)iface
;
334 FIXME("(%p/%p)->(%p,%p) stub!\n", This
, iface
, pstrNameBuf
, pdwBufLen
);
339 static HRESULT WINAPI
IDirectXFileDataImpl_GetId(IDirectXFileData
* iface
, LPGUID pGuid
)
341 IDirectXFileDataImpl
*This
= (IDirectXFileDataImpl
*)iface
;
343 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, pGuid
);
348 /*** IDirectXFileData methods ***/
349 static HRESULT WINAPI
IDirectXFileDataImpl_GetData(IDirectXFileData
* iface
, LPCSTR szMember
, DWORD
* pcbSize
, void** ppvData
)
351 IDirectXFileDataImpl
*This
= (IDirectXFileDataImpl
*)iface
;
353 FIXME("(%p/%p)->(%s,%p,%p) stub!\n", This
, iface
, szMember
, pcbSize
, ppvData
);
358 static HRESULT WINAPI
IDirectXFileDataImpl_GetType(IDirectXFileData
* iface
, const GUID
** pguid
)
360 IDirectXFileDataImpl
*This
= (IDirectXFileDataImpl
*)iface
;
362 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, pguid
);
367 static HRESULT WINAPI
IDirectXFileDataImpl_GetNextObject(IDirectXFileData
* iface
, LPDIRECTXFILEOBJECT
* ppChildObj
)
369 IDirectXFileDataImpl
*This
= (IDirectXFileDataImpl
*)iface
;
371 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, ppChildObj
);
376 static HRESULT WINAPI
IDirectXFileDataImpl_AddDataObject(IDirectXFileData
* iface
, LPDIRECTXFILEDATA pDataObj
)
378 IDirectXFileDataImpl
*This
= (IDirectXFileDataImpl
*)iface
;
380 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, pDataObj
);
385 static HRESULT WINAPI
IDirectXFileDataImpl_AddDataReference(IDirectXFileData
* iface
, LPCSTR szRef
, const GUID
* pguidRef
)
387 IDirectXFileDataImpl
*This
= (IDirectXFileDataImpl
*)iface
;
389 FIXME("(%p/%p)->(%s,%p) stub!\n", This
, iface
, szRef
, pguidRef
);
394 static HRESULT WINAPI
IDirectXFileDataImpl_AddBinaryObject(IDirectXFileData
* iface
, LPCSTR szName
, const GUID
* pguid
, LPCSTR szMimeType
, LPVOID pvData
, DWORD cbSize
)
396 IDirectXFileDataImpl
*This
= (IDirectXFileDataImpl
*)iface
;
398 FIXME("(%p/%p)->(%s,%p,%s,%p,%ld) stub!\n", This
, iface
, szName
, pguid
, szMimeType
, pvData
, cbSize
);
403 static IDirectXFileDataVtbl IDirectXFileData_Vtbl
=
405 IDirectXFileDataImpl_QueryInterface
,
406 IDirectXFileDataImpl_AddRef
,
407 IDirectXFileDataImpl_Release
,
408 IDirectXFileDataImpl_GetName
,
409 IDirectXFileDataImpl_GetId
,
410 IDirectXFileDataImpl_GetData
,
411 IDirectXFileDataImpl_GetType
,
412 IDirectXFileDataImpl_GetNextObject
,
413 IDirectXFileDataImpl_AddDataObject
,
414 IDirectXFileDataImpl_AddDataReference
,
415 IDirectXFileDataImpl_AddBinaryObject
418 HRESULT
IDirectXFileDataReferenceImpl_Create(IDirectXFileDataReferenceImpl
** ppObj
)
420 IDirectXFileDataReferenceImpl
* object
;
422 TRACE("(%p)\n", ppObj
);
424 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectXFileDataReferenceImpl
));
426 object
->lpVtbl
.lpVtbl
= &IDirectXFileDataReference_Vtbl
;
434 /*** IUnknown methods ***/
435 static HRESULT WINAPI
IDirectXFileDataReferenceImpl_QueryInterface(IDirectXFileDataReference
* iface
, REFIID riid
, void** ppvObject
)
437 IDirectXFileDataReferenceImpl
*This
= (IDirectXFileDataReferenceImpl
*)iface
;
439 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ppvObject
);
441 if (IsEqualGUID(riid
, &IID_IUnknown
)
442 || IsEqualGUID(riid
, &IID_IDirectXFileObject
)
443 || IsEqualGUID(riid
, &IID_IDirectXFileDataReference
))
445 IClassFactory_AddRef(iface
);
450 ERR("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppvObject
);
451 return E_NOINTERFACE
;
454 static ULONG WINAPI
IDirectXFileDataReferenceImpl_AddRef(IDirectXFileDataReference
* iface
)
456 IDirectXFileDataReferenceImpl
*This
= (IDirectXFileDataReferenceImpl
*)iface
;
458 TRACE("(%p/%p)\n", iface
, This
);
464 static ULONG WINAPI
IDirectXFileDataReferenceImpl_Release(IDirectXFileDataReference
* iface
)
466 IDirectXFileDataReferenceImpl
*This
= (IDirectXFileDataReferenceImpl
*)iface
;
468 TRACE("(%p/%p)\n", iface
, This
);
471 HeapFree(GetProcessHeap(), 0, This
);
476 /*** IDirectXFileObject methods ***/
477 static HRESULT WINAPI
IDirectXFileDataReferenceImpl_GetName(IDirectXFileDataReference
* iface
, LPSTR pstrNameBuf
, LPDWORD pdwBufLen
)
479 IDirectXFileDataReferenceImpl
*This
= (IDirectXFileDataReferenceImpl
*)iface
;
481 FIXME("(%p/%p)->(%p,%p) stub!\n", This
, iface
, pstrNameBuf
, pdwBufLen
);
486 static HRESULT WINAPI
IDirectXFileDataReferenceImpl_GetId(IDirectXFileDataReference
* iface
, LPGUID pGuid
)
488 IDirectXFileDataReferenceImpl
*This
= (IDirectXFileDataReferenceImpl
*)iface
;
490 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, pGuid
);
495 /*** IDirectXFileDataReference ***/
496 static HRESULT WINAPI
IDirectXFileDataReferenceImpl_Resolve(IDirectXFileDataReference
* iface
, LPDIRECTXFILEDATA
* ppDataObj
)
498 IDirectXFileDataReferenceImpl
*This
= (IDirectXFileDataReferenceImpl
*)iface
;
500 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, ppDataObj
);
505 static IDirectXFileDataReferenceVtbl IDirectXFileDataReference_Vtbl
=
507 IDirectXFileDataReferenceImpl_QueryInterface
,
508 IDirectXFileDataReferenceImpl_AddRef
,
509 IDirectXFileDataReferenceImpl_Release
,
510 IDirectXFileDataReferenceImpl_GetName
,
511 IDirectXFileDataReferenceImpl_GetId
,
512 IDirectXFileDataReferenceImpl_Resolve
515 HRESULT
IDirectXFileEnumObjectImpl_Create(IDirectXFileEnumObjectImpl
** ppObj
)
517 IDirectXFileEnumObjectImpl
* object
;
519 TRACE("(%p)\n", ppObj
);
521 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectXFileEnumObjectImpl
));
523 object
->lpVtbl
.lpVtbl
= &IDirectXFileEnumObject_Vtbl
;
531 /*** IUnknown methods ***/
532 static HRESULT WINAPI
IDirectXFileEnumObjectImpl_QueryInterface(IDirectXFileEnumObject
* iface
, REFIID riid
, void** ppvObject
)
534 IDirectXFileEnumObjectImpl
*This
= (IDirectXFileEnumObjectImpl
*)iface
;
536 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ppvObject
);
538 if (IsEqualGUID(riid
, &IID_IUnknown
)
539 || IsEqualGUID(riid
, &IID_IDirectXFileEnumObject
))
541 IClassFactory_AddRef(iface
);
546 ERR("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppvObject
);
547 return E_NOINTERFACE
;
550 static ULONG WINAPI
IDirectXFileEnumObjectImpl_AddRef(IDirectXFileEnumObject
* iface
)
552 IDirectXFileEnumObjectImpl
*This
= (IDirectXFileEnumObjectImpl
*)iface
;
554 TRACE("(%p/%p)\n", iface
, This
);
560 static ULONG WINAPI
IDirectXFileEnumObjectImpl_Release(IDirectXFileEnumObject
* iface
)
562 IDirectXFileEnumObjectImpl
*This
= (IDirectXFileEnumObjectImpl
*)iface
;
564 TRACE("(%p/%p)\n", iface
, This
);
567 HeapFree(GetProcessHeap(), 0, This
);
572 /*** IDirectXFileEnumObject methods ***/
573 static HRESULT WINAPI
IDirectXFileEnumObjectImpl_GetNextDataObject(IDirectXFileEnumObject
* iface
, LPDIRECTXFILEDATA
* ppDataObj
)
575 IDirectXFileEnumObjectImpl
*This
= (IDirectXFileEnumObjectImpl
*)iface
;
576 IDirectXFileDataImpl
* object
;
578 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, ppDataObj
);
580 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectXFileDataImpl
));
582 object
->lpVtbl
.lpVtbl
= &IDirectXFileData_Vtbl
;
585 *ppDataObj
= (LPDIRECTXFILEDATA
)object
;
590 static HRESULT WINAPI
IDirectXFileEnumObjectImpl_GetDataObjectById(IDirectXFileEnumObject
* iface
, REFGUID rguid
, LPDIRECTXFILEDATA
* ppDataObj
)
592 IDirectXFileEnumObjectImpl
*This
= (IDirectXFileEnumObjectImpl
*)iface
;
594 FIXME("(%p/%p)->(%p,%p) stub!\n", This
, iface
, rguid
, ppDataObj
);
599 static HRESULT WINAPI
IDirectXFileEnumObjectImpl_GetDataObjectByName(IDirectXFileEnumObject
* iface
, LPCSTR szName
, LPDIRECTXFILEDATA
* ppDataObj
)
601 IDirectXFileEnumObjectImpl
*This
= (IDirectXFileEnumObjectImpl
*)iface
;
603 FIXME("(%p/%p)->(%s,%p) stub!\n", This
, iface
, szName
, ppDataObj
);
608 static IDirectXFileEnumObjectVtbl IDirectXFileEnumObject_Vtbl
=
610 IDirectXFileEnumObjectImpl_QueryInterface
,
611 IDirectXFileEnumObjectImpl_AddRef
,
612 IDirectXFileEnumObjectImpl_Release
,
613 IDirectXFileEnumObjectImpl_GetNextDataObject
,
614 IDirectXFileEnumObjectImpl_GetDataObjectById
,
615 IDirectXFileEnumObjectImpl_GetDataObjectByName
618 HRESULT
IDirectXFileObjectImpl_Create(IDirectXFileObjectImpl
** ppObj
)
620 IDirectXFileObjectImpl
* object
;
622 TRACE("(%p)\n", ppObj
);
624 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectXFileObjectImpl
));
626 object
->lpVtbl
.lpVtbl
= &IDirectXFileObject_Vtbl
;
634 /*** IUnknown methods ***/
635 static HRESULT WINAPI
IDirectXFileObjectImpl_QueryInterface(IDirectXFileObject
* iface
, REFIID riid
, void** ppvObject
)
637 IDirectXFileObjectImpl
*This
= (IDirectXFileObjectImpl
*)iface
;
639 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ppvObject
);
641 if (IsEqualGUID(riid
, &IID_IUnknown
)
642 || IsEqualGUID(riid
, &IID_IDirectXFileObject
))
644 IClassFactory_AddRef(iface
);
649 ERR("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppvObject
);
650 return E_NOINTERFACE
;
653 static ULONG WINAPI
IDirectXFileObjectImpl_AddRef(IDirectXFileObject
* iface
)
655 IDirectXFileObjectImpl
*This
= (IDirectXFileObjectImpl
*)iface
;
657 TRACE("(%p/%p)\n", iface
, This
);
663 static ULONG WINAPI
IDirectXFileObjectImpl_Release(IDirectXFileObject
* iface
)
665 IDirectXFileObjectImpl
*This
= (IDirectXFileObjectImpl
*)iface
;
667 TRACE("(%p/%p)\n", iface
, This
);
670 HeapFree(GetProcessHeap(), 0, This
);
675 /*** IDirectXFileObject methods ***/
676 static HRESULT WINAPI
IDirectXFileObjectImpl_GetName(IDirectXFileObject
* iface
, LPSTR pstrNameBuf
, LPDWORD pdwBufLen
)
678 IDirectXFileDataReferenceImpl
*This
= (IDirectXFileDataReferenceImpl
*)iface
;
680 FIXME("(%p/%p)->(%p,%p) stub!\n", This
, iface
, pstrNameBuf
, pdwBufLen
);
685 static HRESULT WINAPI
IDirectXFileObjectImpl_GetId(IDirectXFileObject
* iface
, LPGUID pGuid
)
687 IDirectXFileObjectImpl
*This
= (IDirectXFileObjectImpl
*)iface
;
689 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, pGuid
);
694 static IDirectXFileObjectVtbl IDirectXFileObject_Vtbl
=
696 IDirectXFileObjectImpl_QueryInterface
,
697 IDirectXFileObjectImpl_AddRef
,
698 IDirectXFileObjectImpl_Release
,
699 IDirectXFileObjectImpl_GetName
,
700 IDirectXFileObjectImpl_GetId
703 HRESULT
IDirectXFileSaveObjectImpl_Create(IDirectXFileSaveObjectImpl
** ppObj
)
705 IDirectXFileSaveObjectImpl
* object
;
707 TRACE("(%p)\n", ppObj
);
709 object
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(IDirectXFileSaveObjectImpl
));
711 object
->lpVtbl
.lpVtbl
= &IDirectXFileSaveObject_Vtbl
;
719 /*** IUnknown methods ***/
720 static HRESULT WINAPI
IDirectXFileSaveObjectImpl_QueryInterface(IDirectXFileSaveObject
* iface
, REFIID riid
, void** ppvObject
)
722 IDirectXFileSaveObjectImpl
*This
= (IDirectXFileSaveObjectImpl
*)iface
;
724 TRACE("(%p/%p)->(%s,%p)\n", iface
, This
, debugstr_guid(riid
), ppvObject
);
726 if (IsEqualGUID(riid
, &IID_IUnknown
)
727 || IsEqualGUID(riid
, &IID_IDirectXFileSaveObject
))
729 IClassFactory_AddRef(iface
);
734 ERR("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppvObject
);
735 return E_NOINTERFACE
;
738 static ULONG WINAPI
IDirectXFileSaveObjectImpl_AddRef(IDirectXFileSaveObject
* iface
)
740 IDirectXFileSaveObjectImpl
*This
= (IDirectXFileSaveObjectImpl
*)iface
;
742 TRACE("(%p/%p)\n", iface
, This
);
748 static ULONG WINAPI
IDirectXFileSaveObjectImpl_Release(IDirectXFileSaveObject
* iface
)
750 IDirectXFileSaveObjectImpl
*This
= (IDirectXFileSaveObjectImpl
*)iface
;
752 TRACE("(%p/%p)\n", iface
, This
);
755 HeapFree(GetProcessHeap(), 0, This
);
760 static HRESULT WINAPI
IDirectXFileSaveObjectImpl_SaveTemplates(IDirectXFileSaveObject
* iface
, DWORD cTemplates
, const GUID
** ppguidTemplates
)
762 IDirectXFileSaveObjectImpl
*This
= (IDirectXFileSaveObjectImpl
*)iface
;
764 FIXME("(%p/%p)->(%ld,%p) stub!\n", This
, iface
, cTemplates
, ppguidTemplates
);
769 static HRESULT WINAPI
IDirectXFileSaveObjectImpl_CreateDataObject(IDirectXFileSaveObject
* iface
, REFGUID rguidTemplate
, LPCSTR szName
, const GUID
* pguid
, DWORD cbSize
, LPVOID pvData
, LPDIRECTXFILEDATA
* ppDataObj
)
771 IDirectXFileSaveObjectImpl
*This
= (IDirectXFileSaveObjectImpl
*)iface
;
773 FIXME("(%p/%p)->(%p,%s,%p,%ld,%p,%p) stub!\n", This
, iface
, rguidTemplate
, szName
, pguid
, cbSize
, pvData
, ppDataObj
);
778 static HRESULT WINAPI
IDirectXFileSaveObjectImpl_SaveData(IDirectXFileSaveObject
* iface
, LPDIRECTXFILEDATA ppDataObj
)
780 IDirectXFileSaveObjectImpl
*This
= (IDirectXFileSaveObjectImpl
*)iface
;
782 FIXME("(%p/%p)->(%p) stub!\n", This
, iface
, ppDataObj
);
787 static IDirectXFileSaveObjectVtbl IDirectXFileSaveObject_Vtbl
=
789 IDirectXFileSaveObjectImpl_QueryInterface
,
790 IDirectXFileSaveObjectImpl_AddRef
,
791 IDirectXFileSaveObjectImpl_Release
,
792 IDirectXFileSaveObjectImpl_SaveTemplates
,
793 IDirectXFileSaveObjectImpl_CreateDataObject
,
794 IDirectXFileSaveObjectImpl_SaveData