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

Last change on this file since 603 was 603, checked in by roman, 6 years ago

Code formatting

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