home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 May / PCFMay2001.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / dxfile.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  8.0 KB  |  242 lines

  1. /***************************************************************************
  2.  *
  3.  *  Copyright (C) 1998-1999 Microsoft Corporation.  All Rights Reserved.
  4.  *
  5.  *  File:       dxfile.h
  6.  *
  7.  *  Content:    DirectX File public header file
  8.  *
  9.  ***************************************************************************/
  10.  
  11. #ifndef __DXFILE_H__
  12. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  13. #define __DXFILE_H__
  14.  
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18.  
  19. typedef DWORD DXFILEFORMAT;
  20.  
  21. #define DXFILEFORMAT_BINARY     0
  22. #define DXFILEFORMAT_TEXT       1
  23. #define DXFILEFORMAT_COMPRESSED 2
  24.  
  25. typedef DWORD DXFILELOADOPTIONS;
  26.  
  27. #define DXFILELOAD_FROMFILE  0x00L
  28. #define DXFILELOAD_FROMRESOURCE 0x01L
  29. #define DXFILELOAD_FROMMEMORY 0x02L
  30. #define DXFILELOAD_FROMSTREAM 0x04L
  31. #define DXFILELOAD_FROMURL 0x08L
  32.  
  33. typedef struct _DXFILELOADRESOURCE {
  34.     HMODULE hModule;
  35.     LPCTSTR lpName;
  36.     LPCTSTR lpType;
  37. }DXFILELOADRESOURCE, *LPDXFILELOADRESOURCE;
  38.  
  39. typedef struct _DXFILELOADMEMORY {
  40.     LPVOID lpMemory;
  41.     DWORD dSize;
  42. }DXFILELOADMEMORY, *LPDXFILELOADMEMORY;
  43.  
  44. /*
  45.  * DirectX File object types.
  46.  */
  47.  
  48. #ifndef WIN_TYPES
  49. #define WIN_TYPES(itype, ptype) typedef interface itype *LP##ptype, **LPLP##ptype
  50. #endif
  51.  
  52. WIN_TYPES(IDirectXFile,                 DIRECTXFILE);
  53. WIN_TYPES(IDirectXFileEnumObject,       DIRECTXFILEENUMOBJECT);
  54. WIN_TYPES(IDirectXFileSaveObject,       DIRECTXFILESAVEOBJECT);
  55. WIN_TYPES(IDirectXFileObject,           DIRECTXFILEOBJECT);
  56. WIN_TYPES(IDirectXFileData,             DIRECTXFILEDATA);
  57. WIN_TYPES(IDirectXFileDataReference,    DIRECTXFILEDATAREFERENCE);
  58. WIN_TYPES(IDirectXFileBinary,           DIRECTXFILEBINARY);
  59.  
  60. /*
  61.  * API for creating IDirectXFile interface.
  62.  */
  63.  
  64. STDAPI DirectXFileCreate(LPDIRECTXFILE *lplpDirectXFile);
  65.  
  66. /*
  67.  * The methods for IUnknown
  68.  */
  69.  
  70. #define IUNKNOWN_METHODS(kind) \
  71.     STDMETHOD(QueryInterface)       (THIS_ REFIID riid, LPVOID *ppvObj) kind; \
  72.     STDMETHOD_(ULONG, AddRef)       (THIS) kind; \
  73.     STDMETHOD_(ULONG, Release)      (THIS) kind
  74.  
  75. /*
  76.  * The methods for IDirectXFileObject
  77.  */
  78.  
  79. #define IDIRECTXFILEOBJECT_METHODS(kind) \
  80.     STDMETHOD(GetName) (THIS_ LPSTR, LPDWORD) kind; \
  81.     STDMETHOD(GetId) (THIS_ LPGUID) kind
  82.  
  83. /*
  84.  * DirectX File interfaces.
  85.  */
  86.  
  87. #undef INTERFACE
  88. #define INTERFACE IDirectXFile
  89.  
  90. DECLARE_INTERFACE_(IDirectXFile, IUnknown)
  91. {
  92.     IUNKNOWN_METHODS(PURE);
  93.     STDMETHOD(CreateEnumObject) (THIS_ LPVOID, DXFILELOADOPTIONS,
  94.                                  LPDIRECTXFILEENUMOBJECT *) PURE;
  95.     STDMETHOD(CreateSaveObject) (THIS_ LPCSTR, DXFILEFORMAT,
  96.                                  LPDIRECTXFILESAVEOBJECT *) PURE;
  97.     STDMETHOD(RegisterTemplates) (THIS_ LPVOID, DWORD) PURE;
  98. };
  99.  
  100. #undef INTERFACE
  101. #define INTERFACE IDirectXFileEnumObject
  102.  
  103. DECLARE_INTERFACE_(IDirectXFileEnumObject, IUnknown)
  104. {
  105.     IUNKNOWN_METHODS(PURE);
  106.     STDMETHOD(GetNextDataObject)    (THIS_ LPDIRECTXFILEDATA *) PURE;
  107.     STDMETHOD(GetDataObjectById)    (THIS_ REFGUID, LPDIRECTXFILEDATA *) PURE;
  108.     STDMETHOD(GetDataObjectByName)  (THIS_ LPCSTR, LPDIRECTXFILEDATA *) PURE;
  109. };
  110.  
  111. #undef INTERFACE
  112. #define INTERFACE IDirectXFileSaveObject
  113.  
  114. DECLARE_INTERFACE_(IDirectXFileSaveObject, IUnknown)
  115. {
  116.     IUNKNOWN_METHODS(PURE);
  117.     STDMETHOD(SaveTemplates) (THIS_ DWORD, const GUID **) PURE;
  118.     STDMETHOD(CreateDataObject) (THIS_ REFGUID, LPCSTR, const GUID *,
  119.                                  DWORD, LPVOID, LPDIRECTXFILEDATA *) PURE;
  120.     STDMETHOD(SaveData) (THIS_ LPDIRECTXFILEDATA) PURE;
  121. };
  122.  
  123.  
  124. #undef INTERFACE
  125. #define INTERFACE IDirectXFileObject
  126.  
  127. DECLARE_INTERFACE_(IDirectXFileObject, IUnknown)
  128. {
  129.     IUNKNOWN_METHODS(PURE);
  130.     IDIRECTXFILEOBJECT_METHODS(PURE);
  131. };
  132.  
  133. #undef INTERFACE
  134. #define INTERFACE IDirectXFileData
  135.  
  136. DECLARE_INTERFACE_(IDirectXFileData, IDirectXFileObject)
  137. {
  138.     IUNKNOWN_METHODS(PURE);
  139.     IDIRECTXFILEOBJECT_METHODS(PURE);
  140.  
  141.     STDMETHOD(GetData)          (THIS_ LPCSTR, DWORD *, void **) PURE;
  142.     STDMETHOD(GetType)          (THIS_ const GUID **) PURE;
  143.     STDMETHOD(GetNextObject)    (THIS_ LPDIRECTXFILEOBJECT *) PURE;
  144.     STDMETHOD(AddDataObject)    (THIS_ LPDIRECTXFILEDATA) PURE;
  145.     STDMETHOD(AddDataReference) (THIS_ LPCSTR, const GUID *) PURE;
  146.     STDMETHOD(AddBinaryObject)  (THIS_ LPCSTR, const GUID *, LPCSTR, LPVOID, DWORD) PURE;
  147. };
  148.  
  149. #undef INTERFACE
  150. #define INTERFACE IDirectXFileDataReference
  151.  
  152. DECLARE_INTERFACE_(IDirectXFileDataReference, IDirectXFileObject)
  153. {
  154.     IUNKNOWN_METHODS(PURE);
  155.     IDIRECTXFILEOBJECT_METHODS(PURE);
  156.  
  157.     STDMETHOD(Resolve) (THIS_ LPDIRECTXFILEDATA *) PURE;
  158. };
  159.  
  160. #undef INTERFACE
  161. #define INTERFACE IDirectXFileBinary
  162.  
  163. DECLARE_INTERFACE_(IDirectXFileBinary, IDirectXFileObject)
  164. {
  165.     IUNKNOWN_METHODS(PURE);
  166.     IDIRECTXFILEOBJECT_METHODS(PURE);
  167.  
  168.     STDMETHOD(GetSize)      (THIS_ DWORD *) PURE;
  169.     STDMETHOD(GetMimeType)  (THIS_ LPCSTR *) PURE;
  170.     STDMETHOD(Read)         (THIS_ LPVOID, DWORD, LPDWORD) PURE;
  171. };
  172.  
  173. /*
  174.  * DirectXFile Object Class Id (for CoCreateInstance())
  175.  */
  176.  
  177. DEFINE_GUID(CLSID_CDirectXFile, 0x4516ec43, 0x8f20, 0x11d0, 0x9b, 0x6d, 0x00, 0x00, 0xc0, 0x78, 0x1b, 0xc3);
  178.  
  179. /*
  180.  * DirectX File Interface GUIDs.
  181.  */
  182.  
  183. DEFINE_GUID(IID_IDirectXFile,               0x3d82ab40, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
  184. DEFINE_GUID(IID_IDirectXFileEnumObject,     0x3d82ab41, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
  185. DEFINE_GUID(IID_IDirectXFileSaveObject,     0x3d82ab42, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
  186. DEFINE_GUID(IID_IDirectXFileObject,         0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
  187. DEFINE_GUID(IID_IDirectXFileData,           0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
  188. DEFINE_GUID(IID_IDirectXFileDataReference,  0x3d82ab45, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
  189. DEFINE_GUID(IID_IDirectXFileBinary,         0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
  190.  
  191. /*
  192.  * DirectX File Header template's GUID.
  193.  */
  194.  
  195. DEFINE_GUID(TID_DXFILEHeader,   0x3d82ab43, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33);
  196.  
  197.  
  198. /*
  199.  * DirectX File errors.
  200.  */
  201.  
  202. #define _FACDD  0x876
  203. #define MAKE_DDHRESULT( code )  MAKE_HRESULT( 1, _FACDD, code )
  204.  
  205. #define DXFILE_OK   0
  206.  
  207. #define DXFILEERR_BADOBJECT                 MAKE_DDHRESULT(850)
  208. #define DXFILEERR_BADVALUE                  MAKE_DDHRESULT(851)
  209. #define DXFILEERR_BADTYPE                   MAKE_DDHRESULT(852)
  210. #define DXFILEERR_BADSTREAMHANDLE           MAKE_DDHRESULT(853)
  211. #define DXFILEERR_BADALLOC                  MAKE_DDHRESULT(854)
  212. #define DXFILEERR_NOTFOUND                  MAKE_DDHRESULT(855)
  213. #define DXFILEERR_NOTDONEYET                MAKE_DDHRESULT(856)
  214. #define DXFILEERR_FILENOTFOUND              MAKE_DDHRESULT(857)
  215. #define DXFILEERR_RESOURCENOTFOUND          MAKE_DDHRESULT(858)
  216. #define DXFILEERR_URLNOTFOUND               MAKE_DDHRESULT(859)
  217. #define DXFILEERR_BADRESOURCE               MAKE_DDHRESULT(860)
  218. #define DXFILEERR_BADFILETYPE               MAKE_DDHRESULT(861)
  219. #define DXFILEERR_BADFILEVERSION            MAKE_DDHRESULT(862)
  220. #define DXFILEERR_BADFILEFLOATSIZE          MAKE_DDHRESULT(863)
  221. #define DXFILEERR_BADFILECOMPRESSIONTYPE    MAKE_DDHRESULT(864)
  222. #define DXFILEERR_BADFILE                   MAKE_DDHRESULT(865)
  223. #define DXFILEERR_PARSEERROR                MAKE_DDHRESULT(866)
  224. #define DXFILEERR_NOTEMPLATE                MAKE_DDHRESULT(867)
  225. #define DXFILEERR_BADARRAYSIZE              MAKE_DDHRESULT(868)
  226. #define DXFILEERR_BADDATAREFERENCE          MAKE_DDHRESULT(869)
  227. #define DXFILEERR_INTERNALERROR             MAKE_DDHRESULT(870)
  228. #define DXFILEERR_NOMOREOBJECTS             MAKE_DDHRESULT(871)
  229. #define DXFILEERR_BADINTRINSICS             MAKE_DDHRESULT(872)
  230. #define DXFILEERR_NOMORESTREAMHANDLES       MAKE_DDHRESULT(873)
  231. #define DXFILEERR_NOMOREDATA                MAKE_DDHRESULT(874)
  232. #define DXFILEERR_BADCACHEFILE              MAKE_DDHRESULT(875)
  233. #define DXFILEERR_NOINTERNET                MAKE_DDHRESULT(876)
  234.  
  235.  
  236. #ifdef __cplusplus
  237. };
  238. #endif
  239.  
  240. #pragma option pop /*P_O_Pop*/
  241. #endif /* _DXFILE_H_ */
  242.