/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS BDA Proxy * FILE: dll/directx/msvidctl/enumtuningspaces.cpp * PURPOSE: ITuningSpace interface * * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org) */ #include "precomp.h" class CEnumTuningSpaces : public IEnumTuningSpaces { public: STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); STDMETHODIMP_(ULONG) AddRef() { InterlockedIncrement(&m_Ref); return m_Ref; } STDMETHODIMP_(ULONG) Release() { InterlockedDecrement(&m_Ref); if (!m_Ref) { //delete this; return 0; } return m_Ref; } // IEnumTuningSpaces methods HRESULT STDMETHODCALLTYPE Next(ULONG celt, ITuningSpace **rgelt, ULONG *pceltFetched); HRESULT STDMETHODCALLTYPE Skip(ULONG celt); HRESULT STDMETHODCALLTYPE Reset(); HRESULT STDMETHODCALLTYPE Clone(IEnumTuningSpaces **ppEnum); CEnumTuningSpaces() : m_Ref(0){}; virtual ~CEnumTuningSpaces(){}; protected: LONG m_Ref; }; HRESULT STDMETHODCALLTYPE CEnumTuningSpaces::QueryInterface( IN REFIID refiid, OUT PVOID* Output) { if (IsEqualGUID(refiid, IID_IUnknown)) { *Output = PVOID(this); reinterpret_cast(*Output)->AddRef(); return NOERROR; } if (IsEqualGUID(refiid, IID_IEnumTuningSpaces)) { *Output = (IEnumTuningSpaces*)this; reinterpret_cast(*Output)->AddRef(); return NOERROR; } WCHAR Buffer[MAX_PATH]; LPOLESTR lpstr; StringFromCLSID(refiid, &lpstr); swprintf(Buffer, L"CEnumTuningSpaces::QueryInterface: NoInterface for %s\n", lpstr); OutputDebugStringW(Buffer); CoTaskMemFree(lpstr); return E_NOINTERFACE; } //------------------------------------------------------------------- // IEnumTuningSpaces // HRESULT STDMETHODCALLTYPE CEnumTuningSpaces::Next(ULONG celt, ITuningSpace **rgelt, ULONG *pceltFetched) { OutputDebugStringW(L"CEnumTuningSpaces::Next : stub\n"); return CTuningSpace_fnConstructor(NULL, IID_ITuningSpace, (void**)rgelt); } HRESULT STDMETHODCALLTYPE CEnumTuningSpaces::Skip(ULONG celt) { OutputDebugStringW(L"CEnumTuningSpaces::Skip : NotImplemented\n"); return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CEnumTuningSpaces::Reset() { OutputDebugStringW(L"CEnumTuningSpaces::Reset : NotImplemented\n"); return E_NOTIMPL; } HRESULT STDMETHODCALLTYPE CEnumTuningSpaces::Clone(IEnumTuningSpaces **ppEnum) { OutputDebugStringW(L"CEnumTuningSpaces::Clone : NotImplemented\n"); return E_NOTIMPL; } HRESULT WINAPI CEnumTuningSpaces_fnConstructor( IUnknown *pUnknown, REFIID riid, LPVOID * ppv) { // construct device control CEnumTuningSpaces * tuningspaces = new CEnumTuningSpaces(); #ifdef MSVIDCTL_TRACE WCHAR Buffer[MAX_PATH]; LPOLESTR lpstr; StringFromCLSID(riid, &lpstr); swprintf(Buffer, L"CEnumTuningSpaces_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown); OutputDebugStringW(Buffer); #endif if (!tuningspaces) return E_OUTOFMEMORY; if (FAILED(tuningspaces->QueryInterface(riid, ppv))) { /* not supported */ delete tuningspaces; return E_NOINTERFACE; } return NOERROR; }