Commit 02bfacff authored by Alexandre Julliard's avatar Alexandre Julliard

dmloader: Make some functions static.

parent 72f3e3d4
......@@ -35,6 +35,46 @@ static ULONG WINAPI IDirectMusicContainerImpl_IPersistStream_AddRef (LPPERSISTST
* IDirectMusicContainerImpl implementation
*/
/* IUnknown/IDirectMusicContainer part: */
static HRESULT DMUSIC_DestroyDirectMusicContainerImpl (LPDIRECTMUSICCONTAINER iface) {
ICOM_THIS_MULTI(IDirectMusicContainerImpl, ContainerVtbl, iface);
LPDIRECTMUSICLOADER pLoader;
LPDIRECTMUSICGETLOADER pGetLoader;
struct list *pEntry;
LPWINE_CONTAINER_ENTRY pContainedObject;
/* get loader (from stream we loaded from) */
TRACE(": getting loader\n");
IStream_QueryInterface (This->pStream, &IID_IDirectMusicGetLoader, (LPVOID*)&pGetLoader);
IDirectMusicGetLoader_GetLoader (pGetLoader, &pLoader);
IDirectMusicGetLoader_Release (pGetLoader);
/* release objects from loader's cache (if appropriate) */
TRACE(": releasing objects from loader's cache\n");
LIST_FOR_EACH (pEntry, This->pContainedObjects) {
pContainedObject = LIST_ENTRY (pEntry, WINE_CONTAINER_ENTRY, entry);
/* my tests indicate that container releases objects *only*
if they were loaded at its load-time (makes sense, it doesn't
have pointers to objects otherwise); BTW: native container seems
to ignore the flags (I won't) */
if (pContainedObject->pObject && !(pContainedObject->dwFlags & DMUS_CONTAINED_OBJF_KEEP)) {
/* flags say it shouldn't be kept in loader's cache */
IDirectMusicLoader_ReleaseObject (pLoader, pContainedObject->pObject);
}
}
IDirectMusicLoader_Release (pLoader);
/* release stream we loaded from */
IStream_Release (This->pStream);
/* FIXME: release allocated entries */
/* decrease number of instances */
InterlockedDecrement (&dwDirectMusicContainer);
return S_OK;
}
static HRESULT WINAPI IDirectMusicContainerImpl_IDirectMusicContainer_QueryInterface (LPDIRECTMUSICCONTAINER iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS_MULTI(IDirectMusicContainerImpl, ContainerVtbl, iface);
......@@ -904,42 +944,3 @@ HRESULT WINAPI DMUSIC_CreateDirectMusicContainerImpl (LPCGUID lpcGUID, LPVOID* p
return IDirectMusicContainerImpl_IDirectMusicContainer_QueryInterface ((LPDIRECTMUSICCONTAINER)&obj->ContainerVtbl, lpcGUID, ppobj);
}
HRESULT WINAPI DMUSIC_DestroyDirectMusicContainerImpl (LPDIRECTMUSICCONTAINER iface) {
ICOM_THIS_MULTI(IDirectMusicContainerImpl, ContainerVtbl, iface);
LPDIRECTMUSICLOADER pLoader;
LPDIRECTMUSICGETLOADER pGetLoader;
struct list *pEntry;
LPWINE_CONTAINER_ENTRY pContainedObject;
/* get loader (from stream we loaded from) */
TRACE(": getting loader\n");
IStream_QueryInterface (This->pStream, &IID_IDirectMusicGetLoader, (LPVOID*)&pGetLoader);
IDirectMusicGetLoader_GetLoader (pGetLoader, &pLoader);
IDirectMusicGetLoader_Release (pGetLoader);
/* release objects from loader's cache (if appropriate) */
TRACE(": releasing objects from loader's cache\n");
LIST_FOR_EACH (pEntry, This->pContainedObjects) {
pContainedObject = LIST_ENTRY (pEntry, WINE_CONTAINER_ENTRY, entry);
/* my tests indicate that container releases objects *only*
if they were loaded at its load-time (makes sense, it doesn't
have pointers to objects otherwise); BTW: native container seems
to ignore the flags (I won't) */
if (pContainedObject->pObject && !(pContainedObject->dwFlags & DMUS_CONTAINED_OBJF_KEEP)) {
/* flags say it shouldn't be kept in loader's cache */
IDirectMusicLoader_ReleaseObject (pLoader, pContainedObject->pObject);
}
}
IDirectMusicLoader_Release (pLoader);
/* release stream we loaded from */
IStream_Release (This->pStream);
/* FIXME: release allocated entries */
/* decrease number of instances */
InterlockedDecrement (&dwDirectMusicContainer);
return S_OK;
}
......@@ -68,10 +68,7 @@ extern HRESULT WINAPI DMUSIC_CreateDirectMusicLoaderCF (LPCGUID lpcGUID, LPVOID
extern HRESULT WINAPI DMUSIC_CreateDirectMusicContainerCF (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
extern HRESULT WINAPI DMUSIC_CreateDirectMusicLoaderImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
extern HRESULT WINAPI DMUSIC_DestroyDirectMusicLoaderImpl (LPDIRECTMUSICLOADER8 iface);
extern HRESULT WINAPI DMUSIC_CreateDirectMusicContainerImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter);
extern HRESULT WINAPI DMUSIC_DestroyDirectMusicContainerImpl(LPDIRECTMUSICCONTAINER iface);
extern HRESULT WINAPI DMUSIC_CreateDirectMusicLoaderFileStream (LPVOID *ppobj);
extern HRESULT WINAPI DMUSIC_CreateDirectMusicLoaderResourceStream (LPVOID *ppobj);
extern HRESULT WINAPI DMUSIC_CreateDirectMusicLoaderGenericStream (LPVOID *ppobj);
......@@ -174,7 +171,6 @@ struct IDirectMusicLoaderFileStream {
/* Custom: */
extern HRESULT WINAPI IDirectMusicLoaderFileStream_Attach (LPSTREAM iface, LPCWSTR wzFile, LPDIRECTMUSICLOADER8 pLoader);
extern void WINAPI IDirectMusicLoaderFileStream_Detach (LPSTREAM iface);
/*****************************************************************************
* IDirectMusicLoaderResourceStream implementation structure
......@@ -196,7 +192,6 @@ struct IDirectMusicLoaderResourceStream {
/* Custom: */
extern HRESULT WINAPI IDirectMusicLoaderResourceStream_Attach (LPSTREAM iface, LPBYTE pbMemData, LONGLONG llMemLength, LONGLONG llPos, LPDIRECTMUSICLOADER8 pLoader);
extern void WINAPI IDirectMusicLoaderResourceStream_Detach (LPSTREAM iface);
/*****************************************************************************
* IDirectMusicLoaderGenericStream implementation structure
......@@ -215,7 +210,6 @@ struct IDirectMusicLoaderGenericStream {
/* Custom: */
extern HRESULT WINAPI IDirectMusicLoaderGenericStream_Attach (LPSTREAM iface, LPSTREAM pStream, LPDIRECTMUSICLOADER8 pLoader);
extern void WINAPI IDirectMusicLoaderGenericStream_Detach (LPSTREAM iface);
/*****************************************************************************
* Misc.
......@@ -226,12 +220,6 @@ typedef struct _WINE_CHUNK {
DWORD dwSize; /* size of the chunk */
} WINE_CHUNK, *LPWINE_CHUNK;
extern HRESULT WINAPI DMUSIC_GetDefaultGMPath (WCHAR wszPath[MAX_PATH]);
extern HRESULT WINAPI DMUSIC_GetLoaderSettings (LPDIRECTMUSICLOADER8 iface, REFGUID pClassID, WCHAR* wszSearchPath, LPBOOL pbCache);
extern HRESULT WINAPI DMUSIC_InitLoaderSettings (LPDIRECTMUSICLOADER8 iface);
extern HRESULT WINAPI DMUSIC_CopyDescriptor (LPDMUS_OBJECTDESC pDst, LPDMUS_OBJECTDESC pSrc);
extern BOOL WINAPI DMUSIC_IsValidLoadableClass (REFCLSID pClassID);
#include "debug.h"
#endif /* __WINE_DMLOADER_PRIVATE_H */
......@@ -21,13 +21,53 @@
WINE_DEFAULT_DEBUG_CHANNEL(dmloader);
static HRESULT DMUSIC_InitLoaderSettings (LPDIRECTMUSICLOADER8 iface);
static HRESULT DMUSIC_GetLoaderSettings (LPDIRECTMUSICLOADER8 iface, REFGUID pClassID, WCHAR* wszSearchPath, LPBOOL pbCache);
static HRESULT DMUSIC_SetLoaderSettings (LPDIRECTMUSICLOADER8 iface, REFGUID pClassID, WCHAR* wszSearchPath, LPBOOL pbCache);
static HRESULT DMUSIC_CopyDescriptor (LPDMUS_OBJECTDESC pDst, LPDMUS_OBJECTDESC pSrc) {
TRACE(": copy \n%s", debugstr_DMUS_OBJECTDESC(pSrc));
/* copy field by field */
if (pSrc->dwValidData & DMUS_OBJ_CLASS) pDst->guidClass = pSrc->guidClass;
if (pSrc->dwValidData & DMUS_OBJ_OBJECT) pDst->guidObject = pSrc->guidObject;
if (pSrc->dwValidData & DMUS_OBJ_DATE) pDst->ftDate = pSrc->ftDate;
if (pSrc->dwValidData & DMUS_OBJ_VERSION) pDst->vVersion = pSrc->vVersion;
if (pSrc->dwValidData & DMUS_OBJ_NAME) strcpyW (pDst->wszName, pSrc->wszName);
if (pSrc->dwValidData & DMUS_OBJ_CATEGORY) strcpyW (pDst->wszCategory, pSrc->wszCategory);
if (pSrc->dwValidData & DMUS_OBJ_FILENAME) strcpyW (pDst->wszFileName, pSrc->wszFileName);
if (pSrc->dwValidData & DMUS_OBJ_STREAM) IStream_Clone (pSrc->pStream, &pDst->pStream);
if (pSrc->dwValidData & DMUS_OBJ_MEMORY) {
pDst->pbMemData = pSrc->pbMemData;
pDst->llMemLength = pSrc->llMemLength;
}
/* set flags */
pDst->dwValidData |= pSrc->dwValidData;
return S_OK;
}
static BOOL DMUSIC_IsValidLoadableClass (REFCLSID pClassID) {
if (IsEqualCLSID(pClassID, &CLSID_DirectMusicAudioPathConfig) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicBand) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicContainer) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicCollection) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicChordMap) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicSegment) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicScript) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicSong) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicStyle) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicGraph) ||
IsEqualCLSID(pClassID, &CLSID_DirectSoundWave) ||
IsEqualCLSID(pClassID, &GUID_DirectMusicAllTypes))
return TRUE;
else
return FALSE;
}
/*****************************************************************************
* IDirectMusicLoaderImpl implementation
*/
/* IUnknown/IDirectMusicLoader(8) part: */
static ULONG WINAPI IDirectMusicLoaderImpl_IDirectMusicLoader_AddRef (LPDIRECTMUSICLOADER8 iface);
static HRESULT WINAPI IDirectMusicLoaderImpl_IDirectMusicLoader_QueryInterface (LPDIRECTMUSICLOADER8 iface, REFIID riid, LPVOID *ppobj) {
ICOM_THIS_MULTI(IDirectMusicLoaderImpl, LoaderVtbl, iface);
......@@ -36,7 +76,7 @@ static HRESULT WINAPI IDirectMusicLoaderImpl_IDirectMusicLoader_QueryInterface (
if (IsEqualIID (riid, &IID_IUnknown) ||
IsEqualIID (riid, &IID_IDirectMusicLoader) ||
IsEqualIID (riid, &IID_IDirectMusicLoader8)) {
IDirectMusicLoaderImpl_IDirectMusicLoader_AddRef (iface);
IDirectMusicLoader_AddRef (iface);
*ppobj = This;
return S_OK;
}
......@@ -57,8 +97,16 @@ static ULONG WINAPI IDirectMusicLoaderImpl_IDirectMusicLoader_Release (LPDIRECTM
DWORD dwRef = InterlockedDecrement (&This->dwRef);
TRACE("(%p): ReleaseRef to %d\n", This, This->dwRef);
if (dwRef == 0) {
DMUSIC_DestroyDirectMusicLoaderImpl (iface);
HeapFree (GetProcessHeap(), 0, This);
/* firstly, release the cache */
IDirectMusicLoader8_ClearCache (iface, &GUID_DirectMusicAllTypes);
/* FIXME: release all allocated entries */
/* destroy critical section */
/*This->CritSect.DebugInfo->Spare[0] = 0;
DeleteCriticalSection (&This->CritSect); */
HeapFree (GetProcessHeap(), 0, This);
/* decrease number of instances */
InterlockedDecrement (&dwDirectMusicLoader);
}
return dwRef;
......@@ -788,6 +836,23 @@ static const IDirectMusicLoader8Vtbl DirectMusicLoader_Loader_Vtbl = {
IDirectMusicLoaderImpl_IDirectMusicLoader_LoadObjectFromFile
};
/* help function for DMUSIC_SetDefaultDLS */
static HRESULT DMUSIC_GetDefaultGMPath (WCHAR wszPath[MAX_PATH]) {
HKEY hkDM;
DWORD returnType, sizeOfReturnBuffer = MAX_PATH;
char szPath[MAX_PATH];
if ((RegOpenKeyExA (HKEY_LOCAL_MACHINE, "Software\\Microsoft\\DirectMusic" , 0, KEY_READ, &hkDM) != ERROR_SUCCESS) ||
(RegQueryValueExA (hkDM, "GMFilePath", NULL, &returnType, (LPBYTE) szPath, &sizeOfReturnBuffer) != ERROR_SUCCESS)) {
WARN(": registry entry missing\n" );
return E_FAIL;
}
/* FIXME: Check return types to ensure we're interpreting data right */
MultiByteToWideChar (CP_ACP, 0, szPath, -1, wszPath, MAX_PATH);
return S_OK;
}
/* for ClassFactory */
HRESULT WINAPI DMUSIC_CreateDirectMusicLoaderImpl (LPCGUID lpcGUID, LPVOID *ppobj, LPUNKNOWN pUnkOuter) {
IDirectMusicLoaderImpl *obj;
......@@ -838,43 +903,8 @@ HRESULT WINAPI DMUSIC_CreateDirectMusicLoaderImpl (LPCGUID lpcGUID, LPVOID *ppob
return IDirectMusicLoaderImpl_IDirectMusicLoader_QueryInterface ((LPDIRECTMUSICLOADER8)obj, lpcGUID, ppobj);
}
HRESULT WINAPI DMUSIC_DestroyDirectMusicLoaderImpl (LPDIRECTMUSICLOADER8 iface) {
ICOM_THIS_MULTI(IDirectMusicLoaderImpl, LoaderVtbl, iface);
TRACE("(%p)\n", This);
/* firstly, release the cache */
IDirectMusicLoader8_ClearCache (iface, &GUID_DirectMusicAllTypes);
/* FIXME: release all allocated entries */
/* destroy critical section */
/*This->CritSect.DebugInfo->Spare[0] = 0;
DeleteCriticalSection (&This->CritSect); */
/* decrease number of instances */
InterlockedDecrement (&dwDirectMusicLoader);
return S_OK;
}
/* help function for DMUSIC_SetDefaultDLS */
HRESULT WINAPI DMUSIC_GetDefaultGMPath (WCHAR wszPath[MAX_PATH]) {
HKEY hkDM;
DWORD returnType, sizeOfReturnBuffer = MAX_PATH;
char szPath[MAX_PATH];
if ((RegOpenKeyExA (HKEY_LOCAL_MACHINE, "Software\\Microsoft\\DirectMusic" , 0, KEY_READ, &hkDM) != ERROR_SUCCESS) ||
(RegQueryValueExA (hkDM, "GMFilePath", NULL, &returnType, (LPBYTE) szPath, &sizeOfReturnBuffer) != ERROR_SUCCESS)) {
WARN(": registry entry missing\n" );
return E_FAIL;
}
/* FIXME: Check return types to ensure we're interpreting data right */
MultiByteToWideChar (CP_ACP, 0, szPath, -1, wszPath, MAX_PATH);
return S_OK;
}
/* help function for retrieval of search path and caching option for certain class */
HRESULT WINAPI DMUSIC_GetLoaderSettings (LPDIRECTMUSICLOADER8 iface, REFGUID pClassID, WCHAR* wszSearchPath, LPBOOL pbCache) {
static HRESULT DMUSIC_GetLoaderSettings (LPDIRECTMUSICLOADER8 iface, REFGUID pClassID, WCHAR* wszSearchPath, LPBOOL pbCache) {
ICOM_THIS_MULTI(IDirectMusicLoaderImpl, LoaderVtbl, iface);
struct list *pEntry;
TRACE(": (%p, %s, %p, %p)\n", This, debugstr_dmguid(pClassID), wszSearchPath, pbCache);
......@@ -916,7 +946,7 @@ static HRESULT DMUSIC_SetLoaderSettings (LPDIRECTMUSICLOADER8 iface, REFGUID pCl
return result;
}
HRESULT WINAPI DMUSIC_InitLoaderSettings (LPDIRECTMUSICLOADER8 iface) {
static HRESULT DMUSIC_InitLoaderSettings (LPDIRECTMUSICLOADER8 iface) {
ICOM_THIS_MULTI(IDirectMusicLoaderImpl, LoaderVtbl, iface);
/* hard-coded list of classes */
......@@ -950,41 +980,3 @@ HRESULT WINAPI DMUSIC_InitLoaderSettings (LPDIRECTMUSICLOADER8 iface) {
return S_OK;
}
HRESULT WINAPI DMUSIC_CopyDescriptor (LPDMUS_OBJECTDESC pDst, LPDMUS_OBJECTDESC pSrc) {
TRACE(": copy \n%s", debugstr_DMUS_OBJECTDESC(pSrc));
/* copy field by field */
if (pSrc->dwValidData & DMUS_OBJ_CLASS) pDst->guidClass = pSrc->guidClass;
if (pSrc->dwValidData & DMUS_OBJ_OBJECT) pDst->guidObject = pSrc->guidObject;
if (pSrc->dwValidData & DMUS_OBJ_DATE) pDst->ftDate = pSrc->ftDate;
if (pSrc->dwValidData & DMUS_OBJ_VERSION) pDst->vVersion = pSrc->vVersion;
if (pSrc->dwValidData & DMUS_OBJ_NAME) strcpyW (pDst->wszName, pSrc->wszName);
if (pSrc->dwValidData & DMUS_OBJ_CATEGORY) strcpyW (pDst->wszCategory, pSrc->wszCategory);
if (pSrc->dwValidData & DMUS_OBJ_FILENAME) strcpyW (pDst->wszFileName, pSrc->wszFileName);
if (pSrc->dwValidData & DMUS_OBJ_STREAM) IStream_Clone (pSrc->pStream, &pDst->pStream);
if (pSrc->dwValidData & DMUS_OBJ_MEMORY) {
pDst->pbMemData = pSrc->pbMemData;
pDst->llMemLength = pSrc->llMemLength;
}
/* set flags */
pDst->dwValidData |= pSrc->dwValidData;
return S_OK;
}
BOOL WINAPI DMUSIC_IsValidLoadableClass (REFCLSID pClassID) {
if (IsEqualCLSID(pClassID, &CLSID_DirectMusicAudioPathConfig) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicBand) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicContainer) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicCollection) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicChordMap) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicSegment) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicScript) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicSong) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicStyle) ||
IsEqualCLSID(pClassID, &CLSID_DirectMusicGraph) ||
IsEqualCLSID(pClassID, &CLSID_DirectSoundWave) ||
IsEqualCLSID(pClassID, &GUID_DirectMusicAllTypes))
return TRUE;
else
return FALSE;
}
......@@ -64,6 +64,14 @@ static ULONG WINAPI IDirectMusicLoaderGenericStream_IDirectMusicGetLoader_AddRef
* IDirectMusicLoaderFileStream implementation
*/
/* Custom : */
static void IDirectMusicLoaderFileStream_Detach (LPSTREAM iface) {
ICOM_THIS_MULTI(IDirectMusicLoaderFileStream, StreamVtbl, iface);
TRACE("(%p)\n", This);
if (This->hFile != INVALID_HANDLE_VALUE) CloseHandle(This->hFile);
This->wzFileName[0] = '\0';
}
HRESULT WINAPI IDirectMusicLoaderFileStream_Attach (LPSTREAM iface, LPCWSTR wzFile, LPDIRECTMUSICLOADER8 pLoader) {
ICOM_THIS_MULTI(IDirectMusicLoaderFileStream, StreamVtbl, iface);
TRACE("(%p, %s, %p)\n", This, debugstr_w(wzFile), pLoader);
......@@ -80,15 +88,6 @@ HRESULT WINAPI IDirectMusicLoaderFileStream_Attach (LPSTREAM iface, LPCWSTR wzFi
return S_OK;
}
void WINAPI IDirectMusicLoaderFileStream_Detach (LPSTREAM iface) {
ICOM_THIS_MULTI(IDirectMusicLoaderFileStream, StreamVtbl, iface);
TRACE("(%p)\n", This);
if (This->hFile != INVALID_HANDLE_VALUE) {
CloseHandle(This->hFile);
}
This->wzFileName[0] = '\0';
}
/* IUnknown/IStream part: */
static HRESULT WINAPI IDirectMusicLoaderFileStream_IStream_QueryInterface (LPSTREAM iface, REFIID riid, void** ppobj) {
......@@ -311,6 +310,15 @@ HRESULT WINAPI DMUSIC_CreateDirectMusicLoaderFileStream (LPVOID* ppobj) {
* IDirectMusicLoaderResourceStream implementation
*/
/* Custom : */
static void IDirectMusicLoaderResourceStream_Detach (LPSTREAM iface) {
ICOM_THIS_MULTI(IDirectMusicLoaderResourceStream, StreamVtbl, iface);
TRACE("(%p)\n", This);
This->pbMemData = NULL;
This->llMemLength = 0;
}
HRESULT WINAPI IDirectMusicLoaderResourceStream_Attach (LPSTREAM iface, LPBYTE pbMemData, LONGLONG llMemLength, LONGLONG llPos, LPDIRECTMUSICLOADER8 pLoader) {
ICOM_THIS_MULTI(IDirectMusicLoaderResourceStream, StreamVtbl, iface);
......@@ -328,14 +336,6 @@ HRESULT WINAPI IDirectMusicLoaderResourceStream_Attach (LPSTREAM iface, LPBYTE p
return S_OK;
}
void WINAPI IDirectMusicLoaderResourceStream_Detach (LPSTREAM iface) {
ICOM_THIS_MULTI(IDirectMusicLoaderResourceStream, StreamVtbl, iface);
TRACE("(%p)\n", This);
This->pbMemData = NULL;
This->llMemLength = 0;
}
/* IUnknown/IStream part: */
static HRESULT WINAPI IDirectMusicLoaderResourceStream_IStream_QueryInterface (LPSTREAM iface, REFIID riid, void** ppobj) {
......@@ -567,6 +567,15 @@ HRESULT WINAPI DMUSIC_CreateDirectMusicLoaderResourceStream (LPVOID* ppobj) {
* IDirectMusicLoaderGenericStream implementation
*/
/* Custom : */
static void IDirectMusicLoaderGenericStream_Detach (LPSTREAM iface) {
ICOM_THIS_MULTI(IDirectMusicLoaderGenericStream, StreamVtbl, iface);
if (This->pStream)
IStream_Release (This->pStream);
This->pStream = NULL;
}
HRESULT WINAPI IDirectMusicLoaderGenericStream_Attach (LPSTREAM iface, LPSTREAM pStream, LPDIRECTMUSICLOADER8 pLoader) {
ICOM_THIS_MULTI(IDirectMusicLoaderGenericStream, StreamVtbl, iface);
......@@ -587,14 +596,6 @@ HRESULT WINAPI IDirectMusicLoaderGenericStream_Attach (LPSTREAM iface, LPSTREAM
return S_OK;
}
void WINAPI IDirectMusicLoaderGenericStream_Detach (LPSTREAM iface) {
ICOM_THIS_MULTI(IDirectMusicLoaderGenericStream, StreamVtbl, iface);
if (This->pStream)
IStream_Release (This->pStream);
This->pStream = NULL;
}
/* IUnknown/IStream part: */
static HRESULT WINAPI IDirectMusicLoaderGenericStream_IStream_QueryInterface (LPSTREAM iface, REFIID riid, void** ppobj) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment