Advertisement
Cleric-K

C++ COM Sink

Mar 8th, 2018
394
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <OleAuto.h>
  3. #include <OCIdl.h>
  4. #include <stdio.h>
  5.  
  6. IID iid_events;
  7.  
  8. class EventSink : IDispatch {
  9.     // Inherited via IDispatch
  10.     virtual HRESULT STDMETHODCALLTYPE  QueryInterface(REFIID riid, void ** ppvObject) override
  11.     {
  12.         if (riid == IID_IUnknown || riid == IID_IDispatch || riid == iid_events) {
  13.             *ppvObject = (void*)this;
  14.             return S_OK;
  15.         }
  16.  
  17.         return E_NOTIMPL;
  18.     }
  19.     virtual ULONG STDMETHODCALLTYPE  AddRef(void) override
  20.     {
  21.         return 0;
  22.     }
  23.     virtual ULONG STDMETHODCALLTYPE  Release(void) override
  24.     {
  25.         return 0;
  26.     }
  27.     virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT * pctinfo) override
  28.     {
  29.         return E_NOTIMPL;
  30.     }
  31.     virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo ** ppTInfo) override
  32.     {
  33.         return E_NOTIMPL;
  34.     }
  35.     virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR * rgszNames, UINT cNames, LCID lcid, DISPID * rgDispId) override
  36.     {
  37.         return E_NOTIMPL;
  38.  
  39.     }
  40.     virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS * pDispParams, VARIANT * pVarResult, EXCEPINFO * pExcepInfo, UINT * puArgErr) override
  41.     {
  42.         return E_NOTIMPL;
  43.     }
  44. };
  45.  
  46. int main()
  47. {
  48.     IRunningObjectTable *prot;
  49.     IMoniker *pmon;
  50.     IUnknown *punk;
  51.     IConnectionPointContainer *pcpc;
  52.     IConnectionPoint *pcp;
  53.     DWORD cookie;
  54.     HRESULT hr;
  55.  
  56.     EventSink sink;
  57.          
  58.    
  59.     IIDFromString(L"{9009311a-c0b2-42a4-8e7c-f42091d71594}", &iid_events);
  60.    
  61.     CoInitialize(NULL);
  62.  
  63.     GetRunningObjectTable(0, &prot);
  64.  
  65.     CreateFileMoniker(L"comTestApp", &pmon);
  66.     prot->GetObjectW(pmon, &punk);
  67.        
  68.     punk->QueryInterface(IID_IConnectionPointContainer, (void**)&pcpc);
  69.    
  70.     hr = pcpc->FindConnectionPoint(iid_events, &pcp);
  71.    
  72.     hr = pcp->Advise((IUnknown*)&sink, &cookie);
  73.     printf("%x", hr);
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement