strmbase: Store and use the chosen IMemAllocator instead of getting it from the input...
[wine] / dlls / strmbase / dispatch.c
1 /*
2  * Generic Implementation of IDispatch for strmbase classes
3  *
4  * Copyright 2012 Aric Stewart, CodeWeavers
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20
21 #define COBJMACROS
22
23 #include "dshow.h"
24 #include "wine/unicode.h"
25 #include "wine/strmbase.h"
26 #include "uuids.h"
27 #include "vfwmsgs.h"
28 #include <assert.h>
29
30 HRESULT WINAPI BaseDispatch_Init(BaseDispatch *This, REFIID riid)
31 {
32     HRESULT hr = E_FAIL;
33     ITypeLib *pTypeLib;
34
35     This->pTypeInfo = NULL;
36     hr = LoadRegTypeLib(&LIBID_QuartzTypeLib, 1, 0, LOCALE_SYSTEM_DEFAULT, &pTypeLib);
37     if (SUCCEEDED(hr))
38     {
39         hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, riid, &This->pTypeInfo);
40
41     if (pTypeLib)
42         ITypeLib_Release(pTypeLib);
43     }
44     return hr;
45 }
46
47 HRESULT WINAPI BaseDispatch_Destroy(BaseDispatch *This)
48 {
49     if (This->pTypeInfo)
50         ITypeInfo_Release(This->pTypeInfo);
51     return S_OK;
52 }
53
54 HRESULT WINAPI BaseDispatchImpl_GetIDsOfNames(BaseDispatch *This, REFIID riid, OLECHAR **rgszNames, UINT cNames, LCID lcid, DISPID *rgdispid)
55 {
56     if (This->pTypeInfo)
57         return ITypeInfo_GetIDsOfNames(This->pTypeInfo, rgszNames, cNames, rgdispid);
58     return E_NOTIMPL;
59 }
60
61 HRESULT WINAPI BaseDispatchImpl_GetTypeInfo(BaseDispatch *This, REFIID riid, UINT itinfo, LCID lcid, ITypeInfo **pptinfo)
62 {
63     if (This->pTypeInfo)
64     {
65         ITypeInfo_AddRef(This->pTypeInfo);
66         *pptinfo = This->pTypeInfo;
67         return S_OK;
68     }
69     return E_NOTIMPL;
70 }
71
72 HRESULT WINAPI BaseDispatchImpl_GetTypeInfoCount(BaseDispatch *This, UINT *pctinfo)
73 {
74     if (This->pTypeInfo)
75         *pctinfo = 1;
76     else
77         *pctinfo = 0;
78     return S_OK;
79 }