MCPcopy Create free account
hub / github.com/LegacyUpdate/LegacyUpdate / IDispatchImpl

Class IDispatchImpl

include/com/IDispatchImpl.h:10–98  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8
9template<class TImpl, const GUID *plibid = NULL>
10class IDispatchImpl : public TImpl
11{
12private:
13 CComPtr<ITypeInfo> m_pTypeInfo;
14
15public:
16 // IUnknown
17 STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) {
18 if (ppvObject == NULL) {
19 return E_POINTER;
20 }
21
22 *ppvObject = NULL;
23
24 if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IDispatch) || IsEqualIID(riid, __uuidof(TImpl))) {
25 *ppvObject = (TImpl *)this;
26 this->AddRef();
27 return S_OK;
28 }
29
30 return E_NOINTERFACE;
31 }
32
33 // IDispatch
34 STDMETHODIMP GetTypeInfoCount(UINT *pctinfo) {
35 if (pctinfo == NULL) {
36 return E_POINTER;
37 }
38 *pctinfo = 1;
39 return S_OK;
40 }
41
42 STDMETHODIMP GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) {
43 if (ppTInfo == NULL) {
44 return E_POINTER;
45 }
46
47 *ppTInfo = NULL;
48
49 if (iTInfo != 0) {
50 return DISP_E_BADINDEX;
51 }
52
53 if (m_pTypeInfo == NULL) {
54 if (plibid == NULL) {
55 return E_NOTIMPL;
56 }
57
58 CComPtr<ITypeLib> pTypeLib;
59 HRESULT hr = LoadRegTypeLib(*plibid, 1, 0, LOCALE_NEUTRAL, &pTypeLib);
60 CHECK_HR_OR_RETURN(L"LoadRegTypeLib");
61
62 hr = pTypeLib->GetTypeInfoOfGuid(__uuidof(TImpl), &m_pTypeInfo);
63 CHECK_HR_OR_RETURN(L"GetTypeInfoOfGuid");
64 }
65
66 *ppTInfo = m_pTypeInfo;
67 m_pTypeInfo->AddRef();

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected