在C++中调用C#开发COM组件时,一般的接口调用都比较容易实现,但是对于COM组件中的事件,C++中要去响应却不好实现。因为C#中事件是采用委托机制,而C++中却没有委托的机制,这样就无法实现对应。那要怎么办呢?
在C++中虽然没有委托的类型来对应,不过C++却可以开发ATL组件,同时里面有用到事件的映射,那么我们是不是可以应用这种机制去实现呢?进过不断的查找资料和一番努力,总算是达成了目标,请看效果图。
Trigger Event是由C#封装的COM组件内部输出的,而Event Reponse : 10000是由COM组件触发C++的事件后输出的。那么这个具体要如何实现呢?我们先看C#的COM组件代码:
IPaint接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace ComEvent
{
[Guid("7EEDF2D8-836C-4294-90A0-7A144ADC93F9")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IPaint
{
[DispId(1)]
void Draw(int count);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
namespace ComEvent
{
[Guid("7FE32A1D-F239-45ad-8188-89738C6EDB6F")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IEvent
{
[DispId(20)]
void DrawEvent(int count);
}
}