//+------------------------------------------------------------------------- // // 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; 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; }