windows-nt/Source/XPSP1/NT/multimedia/directx/dxvb/dx8vb/xfileenumobj.cpp
2020-09-26 16:20:57 +08:00

137 lines
2.7 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1999
//
// File: dpmsgobj.cpp
//
//--------------------------------------------------------------------------
#include "stdafx.h"
#include "Direct.h"
#include "dms.h"
#include "dxfile.h"
#include "XfileDataObj.h"
#include "XfileEnumObj.h"
extern HRESULT XFILEBSTRtoGUID(LPGUID,BSTR);
extern HRESULT BSTRtoGUID(LPGUID,BSTR);
extern BSTR GUIDtoBSTR(LPGUID);
C_dxj_DirectXFileEnumObject::C_dxj_DirectXFileEnumObject()
{
m_pXFileEnum=NULL;
}
C_dxj_DirectXFileEnumObject::~C_dxj_DirectXFileEnumObject()
{
if (m_pXFileEnum) m_pXFileEnum->Release();
}
HRESULT C_dxj_DirectXFileEnumObject::create( IDirectXFileEnumObject *pEnum,I_dxj_DirectXFileEnum **ret)
{
HRESULT hr;
if (!ret) return E_INVALIDARG;
//caller must addref
C_dxj_DirectXFileEnumObject *c=NULL;
c=new CComObject<C_dxj_DirectXFileEnumObject>;
if( c == NULL ) return E_OUTOFMEMORY;
c->Init(pEnum);
hr=c->QueryInterface(IID_I_dxj_DirectXFileEnum, (void**)ret);
return hr;
}
HRESULT C_dxj_DirectXFileEnumObject::Init( IDirectXFileEnumObject *pEnum)
{
m_pXFileEnum=pEnum;
return S_OK;
}
STDMETHODIMP C_dxj_DirectXFileEnumObject::GetNextDataObject(
/* [retval][out] */ I_dxj_DirectXFileData __RPC_FAR *__RPC_FAR *ret)
{
HRESULT hr;
IDirectXFileData *pXFData=NULL;
hr=m_pXFileEnum->GetNextDataObject(&pXFData);
if (hr==DXFILEERR_NOMOREOBJECTS){
*ret=NULL;
return S_OK;
}
if FAILED(hr) return hr;
if (pXFData==NULL) {
*ret=NULL;
return S_OK;
}
hr=C_dxj_DirectXFileDataObject::create(pXFData,ret);
if FAILED(hr) pXFData->Release();
return hr;
}
STDMETHODIMP C_dxj_DirectXFileEnumObject::GetDataObjectById(
/* [in] */ BSTR id,
I_dxj_DirectXFileData __RPC_FAR *__RPC_FAR *ret)
{
HRESULT hr;
GUID g;
ZeroMemory(&g,sizeof(GUID));
hr=XFILEBSTRtoGUID(&g,id);
if FAILED(hr) return hr;
IDirectXFileData *pXFData=NULL;
hr=m_pXFileEnum->GetDataObjectById(g,&pXFData);
if FAILED(hr) return hr;
if (pXFData==NULL) {
*ret=NULL;
return S_OK;
}
hr=C_dxj_DirectXFileDataObject::create(pXFData,ret);
if FAILED(hr) pXFData->Release();
return hr;
}
STDMETHODIMP C_dxj_DirectXFileEnumObject::GetDataObjectByName(
/* [in] */ BSTR id,
I_dxj_DirectXFileData __RPC_FAR *__RPC_FAR *ret)
{
USES_CONVERSION;
HRESULT hr;
LPSTR szName=W2T(id);
IDirectXFileData *pXFData=NULL;
hr=m_pXFileEnum->GetDataObjectByName(szName,&pXFData);
if FAILED(hr) return hr;
if (pXFData==NULL) {
*ret=NULL;
return S_OK;
}
hr=C_dxj_DirectXFileDataObject::create(pXFData,ret);
if FAILED(hr) pXFData->Release();
return hr;
}