ATL中的连接点提供了组件与客户端相互通信的渠道,连接点在脚本语言中使用比较方便,但在C++中使用一般要自己实现IDispatch相关接口函数,使用起来很不方便,本文介绍在一般的C++工程中使用ATL,创建Sink的方式
一、定义接收器模板类基类
CppConnectionPointSink.h
#ifndef __CPP_CONNECTIONPOINT_SINK_H__
#define __CPP_CONNECTIONPOINT_SINK_H__
#include <atlbase.h>
#include <atlcom.h>
template<class T, class _TIEvent, UINT _ID>
class CCppConnectionPointSink :
public IDispatchImpl<_TIEvent>,
public CComObjectRoot,
public IDispEventSimpleImpl<_ID, T, &__uuidof(_TIEvent)>
{
BEGIN_COM_MAP(T)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(_TIEvent)
END_COM_MAP()
};
#endif
二、实现接收器类
SinkAddResult.h
#pragma once
#include "CppConnectionPointSink.h"
extern _ATL_FUNC_INFO AddResultInfo;
class CSinkAddResult : public CCppConnectionPointSin