Reactos
at master 142 lines 3.4 kB view raw
1/* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS BDA Proxy 4 * FILE: dll/directx/msvidctl/enumtuningspaces.cpp 5 * PURPOSE: ITuningSpace interface 6 * 7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org) 8 */ 9#include "precomp.h" 10 11class CEnumTuningSpaces : public IEnumTuningSpaces 12{ 13public: 14 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); 15 16 STDMETHODIMP_(ULONG) AddRef() 17 { 18 InterlockedIncrement(&m_Ref); 19 return m_Ref; 20 } 21 STDMETHODIMP_(ULONG) Release() 22 { 23 InterlockedDecrement(&m_Ref); 24 if (!m_Ref) 25 { 26 //delete this; 27 return 0; 28 } 29 return m_Ref; 30 } 31 32 // IEnumTuningSpaces methods 33 HRESULT STDMETHODCALLTYPE Next(ULONG celt, ITuningSpace **rgelt, ULONG *pceltFetched); 34 HRESULT STDMETHODCALLTYPE Skip(ULONG celt); 35 HRESULT STDMETHODCALLTYPE Reset(); 36 HRESULT STDMETHODCALLTYPE Clone(IEnumTuningSpaces **ppEnum); 37 38 CEnumTuningSpaces() : m_Ref(0){}; 39 40 virtual ~CEnumTuningSpaces(){}; 41 42protected: 43 LONG m_Ref; 44}; 45 46HRESULT 47STDMETHODCALLTYPE 48CEnumTuningSpaces::QueryInterface( 49 IN REFIID refiid, 50 OUT PVOID* Output) 51{ 52 if (IsEqualGUID(refiid, IID_IUnknown)) 53 { 54 *Output = PVOID(this); 55 reinterpret_cast<IUnknown*>(*Output)->AddRef(); 56 return NOERROR; 57 } 58 59 if (IsEqualGUID(refiid, IID_IEnumTuningSpaces)) 60 { 61 *Output = (IEnumTuningSpaces*)this; 62 reinterpret_cast<IEnumTuningSpaces*>(*Output)->AddRef(); 63 return NOERROR; 64 } 65 66 WCHAR Buffer[MAX_PATH]; 67 LPOLESTR lpstr; 68 StringFromCLSID(refiid, &lpstr); 69 swprintf(Buffer, L"CEnumTuningSpaces::QueryInterface: NoInterface for %s\n", lpstr); 70 OutputDebugStringW(Buffer); 71 CoTaskMemFree(lpstr); 72 73 return E_NOINTERFACE; 74} 75 76//------------------------------------------------------------------- 77// IEnumTuningSpaces 78// 79HRESULT 80STDMETHODCALLTYPE 81CEnumTuningSpaces::Next(ULONG celt, ITuningSpace **rgelt, ULONG *pceltFetched) 82{ 83 OutputDebugStringW(L"CEnumTuningSpaces::Next : stub\n"); 84 return CTuningSpace_fnConstructor(NULL, IID_ITuningSpace, (void**)rgelt); 85 86} 87 88HRESULT 89STDMETHODCALLTYPE 90CEnumTuningSpaces::Skip(ULONG celt) 91{ 92 OutputDebugStringW(L"CEnumTuningSpaces::Skip : NotImplemented\n"); 93 return E_NOTIMPL; 94} 95 96HRESULT 97STDMETHODCALLTYPE 98CEnumTuningSpaces::Reset() 99{ 100 OutputDebugStringW(L"CEnumTuningSpaces::Reset : NotImplemented\n"); 101 return E_NOTIMPL; 102} 103 104HRESULT 105STDMETHODCALLTYPE 106CEnumTuningSpaces::Clone(IEnumTuningSpaces **ppEnum) 107{ 108 OutputDebugStringW(L"CEnumTuningSpaces::Clone : NotImplemented\n"); 109 return E_NOTIMPL; 110} 111 112HRESULT 113WINAPI 114CEnumTuningSpaces_fnConstructor( 115 IUnknown *pUnknown, 116 REFIID riid, 117 LPVOID * ppv) 118{ 119 // construct device control 120 CEnumTuningSpaces * tuningspaces = new CEnumTuningSpaces(); 121 122#ifdef MSVIDCTL_TRACE 123 WCHAR Buffer[MAX_PATH]; 124 LPOLESTR lpstr; 125 StringFromCLSID(riid, &lpstr); 126 swprintf(Buffer, L"CEnumTuningSpaces_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown); 127 OutputDebugStringW(Buffer); 128#endif 129 130 if (!tuningspaces) 131 return E_OUTOFMEMORY; 132 133 if (FAILED(tuningspaces->QueryInterface(riid, ppv))) 134 { 135 /* not supported */ 136 delete tuningspaces; 137 return E_NOINTERFACE; 138 } 139 140 return NOERROR; 141} 142