VC++实现COM事件接收器

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 sinall 的 blog

1、给程序添加atl支持。

      右键->new atl object

2、实现idispeventimpl 接口。

//eventsink.h

#import "..\server\debug\server.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();
}

本文关键:VC++实现COM事件接收器
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top