source: trunk/Utilities/Miscellaneous/ComEvents01/Consumer/Consumer.cpp @ 601

Last change on this file since 601 was 601, checked in by roman, 6 years ago
File size: 2.9 KB
Line 
1#include "stdafx.h"
2
3#import "libid:D5B49BC2-6062-417E-897E-1018E62BF038" raw_interfaces_only // ComEvents01
4
5class CSink :
6        public IDispatch
7{
8private:
9        CComPtr<ITypeLib> m_pTypeLib;
10        CComPtr<ITypeInfo> m_pTypeInfo;
11
12public:
13// CSink
14        CSink()
15        {
16                ATLENSURE_SUCCEEDED(LoadRegTypeLib(__uuidof(ComEvents01::__ComEvents01), 1, 0, 0, &m_pTypeLib));
17                ATLENSURE_SUCCEEDED(m_pTypeLib->GetTypeInfoOfGuid(__uuidof(ComEvents01::IParserStateEvents), &m_pTypeInfo));
18        }
19
20// IUnkonwn
21    STDMETHOD(QueryInterface)(REFIID InterfaceIdentifier,       VOID** ppvObject) override
22        {
23                if(!(InterfaceIdentifier == __uuidof(IUnknown) || InterfaceIdentifier == __uuidof(IDispatch) || InterfaceIdentifier == __uuidof(ComEvents01::IParserStateEvents)))
24                        return E_NOINTERFACE;
25                *ppvObject = this;
26                return S_OK;
27        }
28    STDMETHOD_(ULONG, AddRef)() override
29        {
30                return 2;
31        }
32    STDMETHOD_(ULONG, Release)() override
33        {
34                return 1;
35        }
36
37// IDispatch
38        STDMETHOD(GetTypeInfoCount)(UINT* pnCount) override
39        {
40                //_Z4(atlTraceCOM, 4, _T("this 0x%p\n"), this);
41                *pnCount = 1;
42                return S_OK;
43        }
44        STDMETHOD(GetTypeInfo)(UINT nIndex, LCID nLocaleIdentifier, ITypeInfo** ppTypeInfo) override
45        {
46                //_Z4(atlTraceCOM, 4, _T("this 0x%p, nIndex %d, nLocaleIdentifier %d\n"), this, nIndex, nLocaleIdentifier);
47                if(nIndex != 0)
48                        return DISP_E_BADINDEX;
49                nLocaleIdentifier;
50                *ppTypeInfo = CComPtr<ITypeInfo>(m_pTypeInfo).Detach();
51                return S_OK;
52        }
53        STDMETHOD(GetIDsOfNames)(REFIID InterfaceIdentifier, LPOLESTR* ppszNames, UINT nNameCount, LCID nLocaleIdentifier, DISPID* pnDispatchIdentifiers) override
54        {
55                //_Z4(atlTraceCOM, 4, _T("this 0x%p, nNameCount %d, nLocaleIdentifier %d\n"), this, nNameCount, nLocaleIdentifier);
56                nLocaleIdentifier;
57                //ATLASSERT(InterfaceIdentifier == __uuidof(ComEvents01::IParserStateEvents));
58                return m_pTypeInfo->GetIDsOfNames(ppszNames, nNameCount, pnDispatchIdentifiers);
59        }
60        STDMETHOD(Invoke)(DISPID nDispatchIdentifier, REFIID InterfaceIdentifier, LCID nLocaleIdentifier, WORD nFlags, DISPPARAMS* pDispParams, VARIANT* pVariantResult, EXCEPINFO* pExcepInfo, UINT* pnErrorArgumentIndex) override
61        {
62                //_Z4(atlTraceCOM, 4, _T("this 0x%p, nDispatchIdentifier %d, nLocaleIdentifier %d, nFlags 0x%x\n"), this, nDispatchIdentifier, nLocaleIdentifier, nFlags);
63                OutputDebugString(_T("IParserStateEvents::Invoke") _T("\r\n"));
64                return S_OK;
65        }
66};
67
68int _tmain(int argc, _TCHAR* argv[])
69{
70        CTrace::SetLevel(4);
71        ATLENSURE_SUCCEEDED(CoInitialize(NULL));
72        {
73                CComPtr<IDispatch> pParserState;
74                ATLENSURE_SUCCEEDED(pParserState.CoCreateInstance(__uuidof(ComEvents01::ParserState)));
75                CSink Sink;
76                DWORD nCookie;
77                ATLENSURE_SUCCEEDED(AtlAdvise(pParserState, &Sink, __uuidof(ComEvents01::IParserStateEvents), &nCookie));
78                ATLENSURE_SUCCEEDED(pParserState.Invoke0(L"Initialize"));
79                ATLENSURE_SUCCEEDED(AtlUnadvise(pParserState, __uuidof(ComEvents01::IParserStateEvents), nCookie));
80        }
81        CoUninitialize();
82        return 0;
83}
84
Note: See TracBrowser for help on using the repository browser.