1 /* DirectMusicLoader Private Include
3 * Copyright (C) 2003-2004 Rok Mandeljc
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Library General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 #ifndef __WINE_DMLOADER_PRIVATE_H
21 #define __WINE_DMLOADER_PRIVATE_H
35 #include "wine/debug.h"
36 #include "wine/list.h"
37 #include "wine/unicode.h"
45 #define ICOM_THIS_MULTI(impl,field,iface) impl* const This=(impl*)((char*)(iface) - offsetof(impl,field))
47 /* dmloader.dll global (for DllCanUnloadNow) */
48 extern DWORD dwDirectMusicLoader
; /* number of DirectMusicLoader(CF) instances */
49 extern DWORD dwDirectMusicContainer
; /* number of DirectMusicContainer(CF) instances */
51 /*****************************************************************************
54 typedef struct IDirectMusicLoaderCF IDirectMusicLoaderCF
;
55 typedef struct IDirectMusicContainerCF IDirectMusicContainerCF
;
57 typedef struct IDirectMusicLoaderImpl IDirectMusicLoaderImpl
;
58 typedef struct IDirectMusicContainerImpl IDirectMusicContainerImpl
;
60 typedef struct IDirectMusicLoaderFileStream IDirectMusicLoaderFileStream
;
61 typedef struct IDirectMusicLoaderResourceStream IDirectMusicLoaderResourceStream
;
62 typedef struct IDirectMusicLoaderGenericStream IDirectMusicLoaderGenericStream
;
65 /*****************************************************************************
66 * Predeclare the interface implementation structures
68 extern IClassFactoryVtbl DirectMusicLoaderCF_Vtbl
;
69 extern IClassFactoryVtbl DirectMusicContainerCF_Vtbl
;
71 extern IDirectMusicLoader8Vtbl DirectMusicLoader_Loader_Vtbl
;
73 extern IDirectMusicContainerVtbl DirectMusicContainer_Container_Vtbl
;
74 extern IDirectMusicObjectVtbl DirectMusicContainer_Object_Vtbl
;
75 extern IPersistStreamVtbl DirectMusicContainer_PersistStream_Vtbl
;
77 extern IStreamVtbl DirectMusicLoaderFileStream_Stream_Vtbl
;
78 extern IDirectMusicGetLoaderVtbl DirectMusicLoaderFileStream_GetLoader_Vtbl
;
80 extern IStreamVtbl DirectMusicLoaderResourceStream_Stream_Vtbl
;
81 extern IDirectMusicGetLoaderVtbl DirectMusicLoaderResourceStream_GetLoader_Vtbl
;
83 extern IStreamVtbl DirectMusicLoaderGenericStream_Stream_Vtbl
;
84 extern IDirectMusicGetLoaderVtbl DirectMusicLoaderGenericStream_GetLoader_Vtbl
;
86 /*****************************************************************************
89 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicLoaderCF (LPCGUID lpcGUID
, LPVOID
*ppobj
, LPUNKNOWN pUnkOuter
);
90 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicContainerCF (LPCGUID lpcGUID
, LPVOID
*ppobj
, LPUNKNOWN pUnkOuter
);
92 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicLoaderImpl (LPCGUID lpcGUID
, LPVOID
*ppobj
, LPUNKNOWN pUnkOuter
);
93 extern HRESULT WINAPI
DMUSIC_DestroyDirectMusicLoaderImpl (LPDIRECTMUSICLOADER8 iface
);
94 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicContainerImpl (LPCGUID lpcGUID
, LPVOID
*ppobj
, LPUNKNOWN pUnkOuter
);
95 extern HRESULT WINAPI
DMUSIC_DestroyDirectMusicContainerImpl(LPDIRECTMUSICCONTAINER iface
);
97 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicLoaderFileStream (LPVOID
*ppobj
);
98 extern HRESULT WINAPI
DMUSIC_DestroyDirectMusicLoaderFileStream (LPSTREAM iface
);
100 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicLoaderResourceStream (LPVOID
*ppobj
);
101 extern HRESULT WINAPI
DMUSIC_DestroyDirectMusicLoaderResourceStream (LPSTREAM iface
);
103 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicLoaderGenericStream (LPVOID
*ppobj
);
104 extern HRESULT WINAPI
DMUSIC_DestroyDirectMusicLoaderGenericStream (LPSTREAM iface
);
106 /*****************************************************************************
107 * IDirectMusicLoaderCF implementation structure
109 struct IDirectMusicLoaderCF
{
110 /* IUnknown fields */
111 IClassFactoryVtbl
*lpVtbl
;
115 /* IUnknown / IClassFactory: */
116 extern HRESULT WINAPI
IDirectMusicLoaderCF_QueryInterface (LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
);
117 extern ULONG WINAPI
IDirectMusicLoaderCF_AddRef (LPCLASSFACTORY iface
);
118 extern ULONG WINAPI
IDirectMusicLoaderCF_Release (LPCLASSFACTORY iface
);
119 extern HRESULT WINAPI
IDirectMusicLoaderCF_CreateInstance (LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
);
120 extern HRESULT WINAPI
IDirectMusicLoaderCF_LockServer (LPCLASSFACTORY iface
,BOOL dolock
);
123 /*****************************************************************************
124 * IDirectMusicContainerCF implementation structure
126 struct IDirectMusicContainerCF
{
127 /* IUnknown fields */
128 IClassFactoryVtbl
*lpVtbl
;
132 /* IUnknown / IClassFactory: */
133 extern HRESULT WINAPI
IDirectMusicContainerCF_QueryInterface (LPCLASSFACTORY iface
,REFIID riid
,LPVOID
*ppobj
);
134 extern ULONG WINAPI
IDirectMusicContainerCF_AddRef (LPCLASSFACTORY iface
);
135 extern ULONG WINAPI
IDirectMusicContainerCF_Release (LPCLASSFACTORY iface
);
136 extern HRESULT WINAPI
IDirectMusicContainerCF_CreateInstance (LPCLASSFACTORY iface
, LPUNKNOWN pOuter
, REFIID riid
, LPVOID
*ppobj
);
137 extern HRESULT WINAPI
IDirectMusicContainerCF_LockServer (LPCLASSFACTORY iface
,BOOL dolock
);
140 /* cache/alias entry */
141 typedef struct _WINE_LOADER_ENTRY
{
142 struct list entry
; /* for listing elements */
143 DMUS_OBJECTDESC Desc
;
144 LPDIRECTMUSICOBJECT pObject
; /* pointer to object */
145 BOOL bInvalidDefaultDLS
; /* my workaround for enabling caching of "faulty" default dls collection */
146 } WINE_LOADER_ENTRY
, *LPWINE_LOADER_ENTRY
;
148 /* cache options, search paths for specific types of objects */
149 typedef struct _WINE_LOADER_OPTION
{
150 struct list entry
; /* for listing elements */
151 GUID guidClass
; /* ID of object type */
152 WCHAR wszSearchPath
[MAX_PATH
]; /* look for objects of certain type in here */
153 BOOL bCache
; /* cache objects of certain type */
154 } WINE_LOADER_OPTION
, *LPWINE_LOADER_OPTION
;
156 /*****************************************************************************
157 * IDirectMusicLoaderImpl implementation structure
159 struct IDirectMusicLoaderImpl
{
161 IDirectMusicLoader8Vtbl
*LoaderVtbl
;
162 /* reference counter */
164 /* simple cache (linked list) */
165 struct list
*pObjects
;
166 /* settings for certain object classes */
167 struct list
*pClassSettings
;
168 /* critical section */
169 CRITICAL_SECTION CritSect
;
172 /* IUnknown / IDirectMusicLoader(8): */
173 extern HRESULT WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_QueryInterface (LPDIRECTMUSICLOADER8 iface
, REFIID riid
, LPVOID
*ppobj
);
174 extern ULONG WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_AddRef (LPDIRECTMUSICLOADER8 iface
);
175 extern ULONG WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_Release (LPDIRECTMUSICLOADER8 iface
);
176 extern HRESULT WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_GetObject (LPDIRECTMUSICLOADER8 iface
, LPDMUS_OBJECTDESC pDesc
, REFIID riid
, LPVOID
*ppv
);
177 extern HRESULT WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_SetObject (LPDIRECTMUSICLOADER8 iface
, LPDMUS_OBJECTDESC pDesc
);
178 extern HRESULT WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_SetSearchDirectory (LPDIRECTMUSICLOADER8 iface
, REFGUID rguidClass
, WCHAR
* pwzPath
, BOOL fClear
);
179 extern HRESULT WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_ScanDirectory (LPDIRECTMUSICLOADER8 iface
, REFGUID rguidClass
, WCHAR
* pwzFileExtension
, WCHAR
* pwzScanFileName
);
180 extern HRESULT WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_CacheObject (LPDIRECTMUSICLOADER8 iface
, IDirectMusicObject
* pObject
);
181 extern HRESULT WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_ReleaseObject (LPDIRECTMUSICLOADER8 iface
, IDirectMusicObject
* pObject
);
182 extern HRESULT WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_ClearCache (LPDIRECTMUSICLOADER8 iface
, REFGUID rguidClass
);
183 extern HRESULT WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_EnableCache (LPDIRECTMUSICLOADER8 iface
, REFGUID rguidClass
, BOOL fEnable
);
184 extern HRESULT WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_EnumObject (LPDIRECTMUSICLOADER8 iface
, REFGUID rguidClass
, DWORD dwIndex
, LPDMUS_OBJECTDESC pDesc
);
185 extern void WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_CollectGarbage (LPDIRECTMUSICLOADER8 iface
);
186 extern HRESULT WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_ReleaseObjectByUnknown (LPDIRECTMUSICLOADER8 iface
, IUnknown
* pObject
);
187 extern HRESULT WINAPI
IDirectMusicLoaderImpl_IDirectMusicLoader_LoadObjectFromFile (LPDIRECTMUSICLOADER8 iface
, REFGUID rguidClassID
, REFIID iidInterfaceID
, WCHAR
* pwzFilePath
, void** ppObject
);
189 /* contained object entry */
190 typedef struct _WINE_CONTAINER_ENTRY
{
191 struct list entry
; /* for listing elements */
192 DMUS_OBJECTDESC Desc
;
194 DWORD dwFlags
; /* DMUS_CONTAINED_OBJF_KEEP: keep object in loader's cache, even when container is released */
196 LPDIRECTMUSICOBJECT pObject
; /* needed when releasing from loader's cache on container release */
197 } WINE_CONTAINER_ENTRY
, *LPWINE_CONTAINER_ENTRY
;
199 /*****************************************************************************
200 * IDirectMusicContainerImpl implementation structure
202 struct IDirectMusicContainerImpl
{
204 IDirectMusicContainerVtbl
*ContainerVtbl
;
205 IDirectMusicObjectVtbl
*ObjectVtbl
;
206 IPersistStreamVtbl
*PersistStreamVtbl
;
207 /* reference counter */
212 DMUS_IO_CONTAINER_HEADER Header
;
214 struct list
*pContainedObjects
;
216 DMUS_OBJECTDESC Desc
;
219 /* IUnknown / IDirectMusicContainer: */
220 extern HRESULT WINAPI
IDirectMusicContainerImpl_IDirectMusicContainer_QueryInterface (LPDIRECTMUSICCONTAINER iface
, REFIID riid
, LPVOID
*ppobj
);
221 extern ULONG WINAPI
IDirectMusicContainerImpl_IDirectMusicContainer_AddRef (LPDIRECTMUSICCONTAINER iface
);
222 extern ULONG WINAPI
IDirectMusicContainerImpl_IDirectMusicContainer_Release (LPDIRECTMUSICCONTAINER iface
);
223 extern HRESULT WINAPI
IDirectMusicContainerImpl_IDirectMusicContainer_EnumObject (LPDIRECTMUSICCONTAINER iface
, REFGUID rguidClass
, DWORD dwIndex
, LPDMUS_OBJECTDESC pDesc
, WCHAR
* pwszAlias
);
224 /* IDirectMusicObject: */
225 extern HRESULT WINAPI
IDirectMusicContainerImpl_IDirectMusicObject_QueryInterface (LPDIRECTMUSICOBJECT iface
, REFIID riid
, LPVOID
*ppobj
);
226 extern ULONG WINAPI
IDirectMusicContainerImpl_IDirectMusicObject_AddRef (LPDIRECTMUSICOBJECT iface
);
227 extern ULONG WINAPI
IDirectMusicContainerImpl_IDirectMusicObject_Release (LPDIRECTMUSICOBJECT iface
);
228 extern HRESULT WINAPI
IDirectMusicContainerImpl_IDirectMusicObject_GetDescriptor (LPDIRECTMUSICOBJECT iface
, LPDMUS_OBJECTDESC pDesc
);
229 extern HRESULT WINAPI
IDirectMusicContainerImpl_IDirectMusicObject_SetDescriptor (LPDIRECTMUSICOBJECT iface
, LPDMUS_OBJECTDESC pDesc
);
230 extern HRESULT WINAPI
IDirectMusicContainerImpl_IDirectMusicObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface
, LPSTREAM pStream
, LPDMUS_OBJECTDESC pDesc
);
231 /* IPersistStream: */
232 extern HRESULT WINAPI
IDirectMusicContainerImpl_IPersistStream_QueryInterface (LPPERSISTSTREAM iface
, REFIID riid
, void** ppvObject
);
233 extern ULONG WINAPI
IDirectMusicContainerImpl_IPersistStream_AddRef (LPPERSISTSTREAM iface
);
234 extern ULONG WINAPI
IDirectMusicContainerImpl_IPersistStream_Release (LPPERSISTSTREAM iface
);
235 extern HRESULT WINAPI
IDirectMusicContainerImpl_IPersistStream_GetClassID (LPPERSISTSTREAM iface
, CLSID
* pClassID
);
236 extern HRESULT WINAPI
IDirectMusicContainerImpl_IPersistStream_IsDirty (LPPERSISTSTREAM iface
);
237 extern HRESULT WINAPI
IDirectMusicContainerImpl_IPersistStream_Load (LPPERSISTSTREAM iface
, IStream
* pStm
);
238 extern HRESULT WINAPI
IDirectMusicContainerImpl_IPersistStream_Save (LPPERSISTSTREAM iface
, IStream
* pStm
, BOOL fClearDirty
);
239 extern HRESULT WINAPI
IDirectMusicContainerImpl_IPersistStream_GetSizeMax (LPPERSISTSTREAM iface
, ULARGE_INTEGER
* pcbSize
);
242 /*****************************************************************************
243 * IDirectMusicLoaderFileStream implementation structure
245 struct IDirectMusicLoaderFileStream
{
247 IStreamVtbl
*StreamVtbl
;
248 IDirectMusicGetLoaderVtbl
*GetLoaderVtbl
;
249 /* reference counter */
252 WCHAR wzFileName
[MAX_PATH
]; /* for clone */
255 LPDIRECTMUSICLOADER8 pLoader
;
259 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_Attach (LPSTREAM iface
, LPCWSTR wzFile
, LPDIRECTMUSICLOADER pLoader
);
260 extern void WINAPI
IDirectMusicLoaderFileStream_Detach (LPSTREAM iface
);
261 /* IUnknown/IStream: */
262 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IStream_QueryInterface (LPSTREAM iface
, REFIID riid
, void** ppobj
);
263 extern ULONG WINAPI
IDirectMusicLoaderFileStream_IStream_AddRef (LPSTREAM iface
);
264 extern ULONG WINAPI
IDirectMusicLoaderFileStream_IStream_Release (LPSTREAM iface
);
265 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IStream_Read (IStream
* iface
, void* pv
, ULONG cb
, ULONG
* pcbRead
);
266 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IStream_Write (LPSTREAM iface
, const void* pv
, ULONG cb
, ULONG
* pcbWritten
);
267 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IStream_Seek (LPSTREAM iface
, LARGE_INTEGER dlibMove
, DWORD dwOrigin
, ULARGE_INTEGER
* plibNewPosition
);
268 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IStream_SetSize (LPSTREAM iface
, ULARGE_INTEGER libNewSize
);
269 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IStream_CopyTo (LPSTREAM iface
, IStream
* pstm
, ULARGE_INTEGER cb
, ULARGE_INTEGER
* pcbRead
, ULARGE_INTEGER
* pcbWritten
);
270 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IStream_Commit (LPSTREAM iface
, DWORD grfCommitFlags
);
271 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IStream_Revert (LPSTREAM iface
);
272 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IStream_LockRegion (LPSTREAM iface
, ULARGE_INTEGER libOffset
, ULARGE_INTEGER cb
, DWORD dwLockType
);
273 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IStream_UnlockRegion (LPSTREAM iface
, ULARGE_INTEGER libOffset
, ULARGE_INTEGER cb
, DWORD dwLockType
);
274 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IStream_Stat (LPSTREAM iface
, STATSTG
* pstatstg
, DWORD grfStatFlag
);
275 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IStream_Clone (LPSTREAM iface
, IStream
** ppstm
);
276 /* IDirectMusicGetLoader: */
277 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IDirectMusicGetLoader_QueryInterface (LPDIRECTMUSICGETLOADER iface
, REFIID riid
, void** ppobj
);
278 extern ULONG WINAPI
IDirectMusicLoaderFileStream_IDirectMusicGetLoader_AddRef (LPDIRECTMUSICGETLOADER iface
);
279 extern ULONG WINAPI
IDirectMusicLoaderFileStream_IDirectMusicGetLoader_Release (LPDIRECTMUSICGETLOADER iface
);
280 extern HRESULT WINAPI
IDirectMusicLoaderFileStream_IDirectMusicGetLoader_GetLoader (LPDIRECTMUSICGETLOADER iface
, IDirectMusicLoader
**ppLoader
);
283 /*****************************************************************************
284 * IDirectMusicLoaderResourceStream implementation structure
286 struct IDirectMusicLoaderResourceStream
{
287 /* IUnknown fields */
288 IStreamVtbl
*StreamVtbl
;
289 IDirectMusicGetLoaderVtbl
*GetLoaderVtbl
;
290 /* reference counter */
294 LONGLONG llMemLength
;
295 /* current position */
298 LPDIRECTMUSICLOADER8 pLoader
;
302 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_Attach (LPSTREAM iface
, LPBYTE pbMemData
, LONGLONG llMemLength
, LONGLONG llPos
, LPDIRECTMUSICLOADER pLoader
);
303 extern void WINAPI
IDirectMusicLoaderResourceStream_Detach (LPSTREAM iface
);
304 /* IUnknown/IStream: */
305 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IStream_QueryInterface (LPSTREAM iface
, REFIID riid
, void** ppobj
);
306 extern ULONG WINAPI
IDirectMusicLoaderResourceStream_IStream_AddRef (LPSTREAM iface
);
307 extern ULONG WINAPI
IDirectMusicLoaderResourceStream_IStream_Release (LPSTREAM iface
);
308 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IStream_Read (IStream
* iface
, void* pv
, ULONG cb
, ULONG
* pcbRead
);
309 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IStream_Write (LPSTREAM iface
, const void* pv
, ULONG cb
, ULONG
* pcbWritten
);
310 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IStream_Seek (LPSTREAM iface
, LARGE_INTEGER dlibMove
, DWORD dwOrigin
, ULARGE_INTEGER
* plibNewPosition
);
311 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IStream_SetSize (LPSTREAM iface
, ULARGE_INTEGER libNewSize
);
312 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IStream_CopyTo (LPSTREAM iface
, IStream
* pstm
, ULARGE_INTEGER cb
, ULARGE_INTEGER
* pcbRead
, ULARGE_INTEGER
* pcbWritten
);
313 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IStream_Commit (LPSTREAM iface
, DWORD grfCommitFlags
);
314 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IStream_Revert (LPSTREAM iface
);
315 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IStream_LockRegion (LPSTREAM iface
, ULARGE_INTEGER libOffset
, ULARGE_INTEGER cb
, DWORD dwLockType
);
316 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IStream_UnlockRegion (LPSTREAM iface
, ULARGE_INTEGER libOffset
, ULARGE_INTEGER cb
, DWORD dwLockType
);
317 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IStream_Stat (LPSTREAM iface
, STATSTG
* pstatstg
, DWORD grfStatFlag
);
318 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IStream_Clone (LPSTREAM iface
, IStream
** ppstm
);
319 /* IDirectMusicGetLoader: */
320 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IDirectMusicGetLoader_QueryInterface (LPDIRECTMUSICGETLOADER iface
, REFIID riid
, void** ppobj
);
321 extern ULONG WINAPI
IDirectMusicLoaderResourceStream_IDirectMusicGetLoader_AddRef (LPDIRECTMUSICGETLOADER iface
);
322 extern ULONG WINAPI
IDirectMusicLoaderResourceStream_IDirectMusicGetLoader_Release (LPDIRECTMUSICGETLOADER iface
);
323 extern HRESULT WINAPI
IDirectMusicLoaderResourceStream_IDirectMusicGetLoader_GetLoader (LPDIRECTMUSICGETLOADER iface
, IDirectMusicLoader
**ppLoader
);
326 /*****************************************************************************
327 * IDirectMusicLoaderGenericStream implementation structure
329 struct IDirectMusicLoaderGenericStream
{
330 /* IUnknown fields */
331 IStreamVtbl
*StreamVtbl
;
332 IDirectMusicGetLoaderVtbl
*GetLoaderVtbl
;
333 /* reference counter */
338 LPDIRECTMUSICLOADER8 pLoader
;
342 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_Attach (LPSTREAM iface
, LPSTREAM pStream
, LPDIRECTMUSICLOADER pLoader
);
343 extern void WINAPI
IDirectMusicLoaderGenericStream_Detach (LPSTREAM iface
);
344 /* IUnknown/IStream: */
345 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IStream_QueryInterface (LPSTREAM iface
, REFIID riid
, void** ppobj
);
346 extern ULONG WINAPI
IDirectMusicLoaderGenericStream_IStream_AddRef (LPSTREAM iface
);
347 extern ULONG WINAPI
IDirectMusicLoaderGenericStream_IStream_Release (LPSTREAM iface
);
348 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IStream_Read (IStream
* iface
, void* pv
, ULONG cb
, ULONG
* pcbRead
);
349 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IStream_Write (LPSTREAM iface
, const void* pv
, ULONG cb
, ULONG
* pcbWritten
);
350 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IStream_Seek (LPSTREAM iface
, LARGE_INTEGER dlibMove
, DWORD dwOrigin
, ULARGE_INTEGER
* plibNewPosition
);
351 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IStream_SetSize (LPSTREAM iface
, ULARGE_INTEGER libNewSize
);
352 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IStream_CopyTo (LPSTREAM iface
, IStream
* pstm
, ULARGE_INTEGER cb
, ULARGE_INTEGER
* pcbRead
, ULARGE_INTEGER
* pcbWritten
);
353 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IStream_Commit (LPSTREAM iface
, DWORD grfCommitFlags
);
354 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IStream_Revert (LPSTREAM iface
);
355 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IStream_LockRegion (LPSTREAM iface
, ULARGE_INTEGER libOffset
, ULARGE_INTEGER cb
, DWORD dwLockType
);
356 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IStream_UnlockRegion (LPSTREAM iface
, ULARGE_INTEGER libOffset
, ULARGE_INTEGER cb
, DWORD dwLockType
);
357 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IStream_Stat (LPSTREAM iface
, STATSTG
* pstatstg
, DWORD grfStatFlag
);
358 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IStream_Clone (LPSTREAM iface
, IStream
** ppstm
);
359 /* IDirectMusicGetLoader: */
360 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IDirectMusicGetLoader_QueryInterface (LPDIRECTMUSICGETLOADER iface
, REFIID riid
, void** ppobj
);
361 extern ULONG WINAPI
IDirectMusicLoaderGenericStream_IDirectMusicGetLoader_AddRef (LPDIRECTMUSICGETLOADER iface
);
362 extern ULONG WINAPI
IDirectMusicLoaderGenericStream_IDirectMusicGetLoader_Release (LPDIRECTMUSICGETLOADER iface
);
363 extern HRESULT WINAPI
IDirectMusicLoaderGenericStream_IDirectMusicGetLoader_GetLoader (LPDIRECTMUSICGETLOADER iface
, IDirectMusicLoader
**ppLoader
);
366 /*****************************************************************************
369 /* for simpler reading */
370 typedef struct _WINE_CHUNK
{
371 FOURCC fccID
; /* FOURCC ID of the chunk */
372 DWORD dwSize
; /* size of the chunk */
373 } WINE_CHUNK
, *LPWINE_CHUNK
;
375 extern HRESULT WINAPI
DMUSIC_GetDefaultGMPath (WCHAR wszPath
[MAX_PATH
]);
376 extern HRESULT WINAPI
DMUSIC_GetLoaderSettings (LPDIRECTMUSICLOADER8 iface
, REFGUID pClassID
, WCHAR
* wszSearchPath
, LPBOOL pbCache
);
377 extern HRESULT WINAPI
DMUSIC_SetLoaderSettings (LPDIRECTMUSICLOADER8 iface
, REFGUID pClassID
, WCHAR
* wszSearchPath
, LPBOOL pbCache
);
378 extern HRESULT WINAPI
DMUSIC_InitLoaderSettings (LPDIRECTMUSICLOADER8 iface
);
379 extern HRESULT WINAPI
DMUSIC_CopyDescriptor (LPDMUS_OBJECTDESC pDst
, LPDMUS_OBJECTDESC pSrc
);
380 extern BOOL WINAPI
DMUSIC_IsValidLoadableClass (REFCLSID pClassID
);
384 #endif /* __WINE_DMLOADER_PRIVATE_H */