Reactos
at master 272 lines 8.1 kB view raw
1/* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS BDA Proxy 4 * FILE: dll/directx/msvidctl/tuningspace_container.cpp 5 * PURPOSE: ITuningSpaceContainer interface 6 * 7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org) 8 */ 9#define _FORCENAMELESSUNION 10#include "precomp.h" 11 12 13class CTuningSpaceContainer : public ITuningSpaceContainer 14{ 15public: 16 17 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface); 18 19 STDMETHODIMP_(ULONG) AddRef() 20 { 21 InterlockedIncrement(&m_Ref); 22 return m_Ref; 23 } 24 STDMETHODIMP_(ULONG) Release() 25 { 26 InterlockedDecrement(&m_Ref); 27 if (!m_Ref) 28 { 29 OutputDebugStringW(L"CTuningSpaceContainer::Release : delete\n"); 30 //delete this; 31 return 0; 32 } 33 return m_Ref; 34 } 35 36 // IDispatch methods 37 HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo); 38 HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); 39 HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); 40 HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); 41 42 //ITuningSpaceContainer methods 43 HRESULT STDMETHODCALLTYPE get_Count(long *Count); 44 HRESULT STDMETHODCALLTYPE get__NewEnum(IEnumVARIANT **NewEnum); 45 HRESULT STDMETHODCALLTYPE get_Item(VARIANT varIndex, ITuningSpace **TuningSpace); 46 HRESULT STDMETHODCALLTYPE put_Item(VARIANT varIndex, ITuningSpace *TuningSpace); 47 HRESULT STDMETHODCALLTYPE TuningSpacesForCLSID(BSTR SpaceCLSID, ITuningSpaces **NewColl); 48 HRESULT STDMETHODCALLTYPE _TuningSpacesForCLSID(REFCLSID SpaceCLSID, ITuningSpaces **NewColl); 49 HRESULT STDMETHODCALLTYPE TuningSpacesForName(BSTR Name, ITuningSpaces **NewColl); 50 HRESULT STDMETHODCALLTYPE FindID(ITuningSpace *TuningSpace, long *ID); 51 HRESULT STDMETHODCALLTYPE Add(ITuningSpace *TuningSpace, VARIANT *NewIndex); 52 HRESULT STDMETHODCALLTYPE get_EnumTuningSpaces(IEnumTuningSpaces **ppEnum); 53 HRESULT STDMETHODCALLTYPE Remove(VARIANT Index); 54 HRESULT STDMETHODCALLTYPE get_MaxCount(long *MaxCount); 55 HRESULT STDMETHODCALLTYPE put_MaxCount(long MaxCount); 56 57 CTuningSpaceContainer() : m_Ref(0){}; 58 59 virtual ~CTuningSpaceContainer(){}; 60 61protected: 62 LONG m_Ref; 63 64}; 65 66HRESULT 67STDMETHODCALLTYPE 68CTuningSpaceContainer::QueryInterface( 69 IN REFIID refiid, 70 OUT PVOID* Output) 71{ 72 if (IsEqualGUID(refiid, IID_IUnknown)) 73 { 74 *Output = PVOID(this); 75 reinterpret_cast<IUnknown*>(*Output)->AddRef(); 76 return NOERROR; 77 } 78 79 if (IsEqualGUID(refiid, IID_ITuningSpaceContainer)) 80 { 81 *Output = (ITuningSpaceContainer*)this; 82 reinterpret_cast<ITuningSpaceContainer*>(*Output)->AddRef(); 83 return NOERROR; 84 } 85 86 WCHAR Buffer[MAX_PATH]; 87 LPOLESTR lpstr; 88 StringFromCLSID(refiid, &lpstr); 89 swprintf(Buffer, L"CTuningSpaceContainer::QueryInterface: NoInterface for %s", lpstr); 90 OutputDebugStringW(Buffer); 91 CoTaskMemFree(lpstr); 92 93 94 return E_NOINTERFACE; 95} 96 97//------------------------------------------------------------------- 98// IDispatch methods 99// 100HRESULT 101STDMETHODCALLTYPE 102CTuningSpaceContainer::GetTypeInfoCount(UINT *pctinfo) 103{ 104 OutputDebugStringW(L"CTuningSpaceContainer::GetTypeInfoCount : NotImplemented\n"); 105 return E_NOTIMPL; 106} 107 108HRESULT 109STDMETHODCALLTYPE 110CTuningSpaceContainer::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) 111{ 112 OutputDebugStringW(L"CTuningSpaceContainer::GetTypeInfo : NotImplemented\n"); 113 return E_NOTIMPL; 114} 115HRESULT 116STDMETHODCALLTYPE 117CTuningSpaceContainer::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) 118{ 119 OutputDebugStringW(L"CTuningSpaceContainer::GetIDsOfNames : NotImplemented\n"); 120 return E_NOTIMPL; 121} 122HRESULT 123STDMETHODCALLTYPE 124CTuningSpaceContainer::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) 125{ 126 OutputDebugStringW(L"CTuningSpaceContainer::Invoke : NotImplemented\n"); 127 return E_NOTIMPL; 128} 129 130//------------------------------------------------------------------- 131// ITuningSpaceContainer methods 132// 133 134HRESULT 135STDMETHODCALLTYPE 136CTuningSpaceContainer::get_Count(long *Count) 137{ 138 OutputDebugStringW(L"CTuningSpaceContainer::get_Count : NotImplemented\n"); 139 return E_NOTIMPL; 140} 141HRESULT 142STDMETHODCALLTYPE 143CTuningSpaceContainer::get__NewEnum(IEnumVARIANT **NewEnum) 144{ 145 OutputDebugStringW(L"CTuningSpaceContainer::get__NewEnum : NotImplemented\n"); 146 return E_NOTIMPL; 147} 148 149HRESULT 150STDMETHODCALLTYPE 151CTuningSpaceContainer::get_Item(VARIANT varIndex, ITuningSpace **TuningSpace) 152{ 153#ifdef MSVIDCTL_TRACE 154 WCHAR Buffer[100]; 155 swprintf(Buffer, L"CTuningSpaceContainer::get_Item : type %x value %s stub\n", varIndex.vt, varIndex.bstrVal); 156 OutputDebugStringW(Buffer); 157#endif 158 159 return CTuningSpace_fnConstructor(NULL, IID_ITuningSpace, (void**)TuningSpace); 160} 161HRESULT 162STDMETHODCALLTYPE 163CTuningSpaceContainer::put_Item(VARIANT varIndex, ITuningSpace *TuningSpace) 164{ 165 OutputDebugStringW(L"CTuningSpaceContainer::put_Item : NotImplemented\n"); 166 return E_NOTIMPL; 167} 168 169HRESULT 170STDMETHODCALLTYPE 171CTuningSpaceContainer::TuningSpacesForCLSID(BSTR SpaceCLSID, ITuningSpaces **NewColl) 172{ 173 OutputDebugStringW(L"CTuningSpaceContainer::TuningSpacesForCLSID : NotImplemented\n"); 174 return E_NOTIMPL; 175} 176HRESULT 177STDMETHODCALLTYPE 178CTuningSpaceContainer::_TuningSpacesForCLSID(REFCLSID SpaceCLSID, ITuningSpaces **NewColl) 179{ 180 OutputDebugStringW(L"CTuningSpaceContainer::_TuningSpacesForCLSID : NotImplemented\n"); 181 return E_NOTIMPL; 182} 183 184HRESULT 185STDMETHODCALLTYPE 186CTuningSpaceContainer::TuningSpacesForName(BSTR Name, ITuningSpaces **NewColl) 187{ 188 OutputDebugStringW(L"CTuningSpaceContainer::TuningSpacesForName : NotImplemented\n"); 189 return E_NOTIMPL; 190} 191 192HRESULT 193STDMETHODCALLTYPE 194CTuningSpaceContainer::FindID(ITuningSpace *TuningSpace, long *ID) 195{ 196 OutputDebugStringW(L"CTuningSpaceContainer::FindID : NotImplemented\n"); 197 return E_NOTIMPL; 198} 199 200HRESULT 201STDMETHODCALLTYPE 202CTuningSpaceContainer::Add(ITuningSpace *TuningSpace, VARIANT *NewIndex) 203{ 204 OutputDebugStringW(L"CTuningSpaceContainer::Add : stub\n"); 205 TuningSpace->AddRef(); 206 NewIndex->vt = VT_BSTR; 207 InterlockedIncrement(&m_Ref); 208 return TuningSpace->get_FriendlyName(&NewIndex->bstrVal); 209} 210HRESULT 211STDMETHODCALLTYPE 212CTuningSpaceContainer::get_EnumTuningSpaces(IEnumTuningSpaces **ppEnum) 213{ 214 OutputDebugStringW(L"CTuningSpaceContainer::get_EnumTuningSpaces : stub\n"); 215 return CEnumTuningSpaces_fnConstructor(NULL, IID_IEnumTuningSpaces, (void**)ppEnum); 216} 217 218HRESULT 219STDMETHODCALLTYPE 220CTuningSpaceContainer::Remove(VARIANT Index) 221{ 222 OutputDebugStringW(L"CTuningSpaceContainer::Remove: NotImplemented\n"); 223 return E_NOTIMPL; 224} 225 226HRESULT 227STDMETHODCALLTYPE 228CTuningSpaceContainer::get_MaxCount(long *MaxCount) 229{ 230 OutputDebugStringW(L"CTuningSpaceContainer::get_MaxCount : NotImplemented\n"); 231 return E_NOTIMPL; 232} 233 234HRESULT 235STDMETHODCALLTYPE 236CTuningSpaceContainer::put_MaxCount(long MaxCount) 237{ 238 OutputDebugStringW(L"CTuningSpaceContainer::put_MaxCount : NotImplemented\n"); 239 return E_NOTIMPL; 240} 241 242 243HRESULT 244WINAPI 245CTuningSpaceContainer_fnConstructor( 246 IUnknown *pUnknown, 247 REFIID riid, 248 LPVOID * ppv) 249{ 250 // construct device control 251 CTuningSpaceContainer * provider = new CTuningSpaceContainer(); 252 253#ifdef MSVIDCTL_TRACE 254 WCHAR Buffer[MAX_PATH]; 255 LPOLESTR lpstr; 256 StringFromCLSID(riid, &lpstr); 257 swprintf(Buffer, L"CTuningSpaceContainer_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown); 258 OutputDebugStringW(Buffer); 259#endif 260 261 if (!provider) 262 return E_OUTOFMEMORY; 263 264 if (FAILED(provider->QueryInterface(riid, ppv))) 265 { 266 /* not supported */ 267 delete provider; 268 return E_NOINTERFACE; 269 } 270 271 return NOERROR; 272}