龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

VC++实现COM事件接收器

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
1、给程序添加ATL支持。 右键->New ATL Object 2、实现IDispEventImpl 接口。 //EventSink.h #import "..ServerDebugServer.exe" raw_interface_only,no_namespace,named_guids class CEventSink : public IDispEventImpl { public: CEventS

1、给程序添加ATL支持。

右键->New ATL Object

2、实现IDispEventImpl 接口。

//EventSink.h

#import "..ServerDebugServer.exe" raw_interface_only,no_namespace,named_guids

class CEventSink :

  

  public IDispEventImpl<0, CEventSink,&DIID__IObjEvents,&LIBID_SERVERLib, 1, 0>

  

  {

  

  public:

  

  CEventSink()

  

  {

  

  }

  

  public:

  

  BEGIN_SINK_MAP(CEventSink)

  

  SINK_ENTRY_EX(0, DIID__IObjEvents, 1, cbFunc01)

  

  END_SINK_MAP()

  

  STDMETHOD(cbFunc01)();

  

  };

  

  

//EventSink.cpp

#include "stdafx.h"

  

  #include "EventSink.h"

STDMETHODIMP CEventSink::cbFunc01()

  

  {

  

  AfxMessageBox("called by Event from dll Server !");

return S_OK;

  

  }

  

  

3、连接对象

// ClientDlg.cpp : implementation file

  

  //

  

  #include "EventSink.h"

  

  

void CClientDlg::OnButton1()

  

  {

  

  // TODO: Add your control notification handler code here

  

  ::CoInitialize(NULL);

  

  {

  

  IObjPtr pObj;

  

  CEventSink *pEventSink= new CEventSink;

  

  pObj.CreateInstance(__uuidof(Obj));

  

  pEventSink->DispEventAdvise(pObj);

  

  pObj->Func01();

  

  pEventSink->DispEventUnadvise(pObj);

  

  delete pEventSink;

  

  }

  

  ::CoUninitialize();

  

  }

  

精彩图集

赞助商链接