在C#中怎样实现COM连接点事件处理?

时间:2022-06-01 19:32:04
通过VC ATL向导实现的COM进程外组件,用连接点机制实现的回调功能。
在VC中Client端需要定义一个接收器Sink类,在该类中实现回调事件处理;
但是在C#客户端中如何完成同样的功能呢?

谢谢。
//////////////

 gisnewcomer() ( ) 信誉:100    Blog   加为好友  2007-2-8 15:07:49  得分: 20   
   
可以直接设置事件处理Handler:
  事件处理函数:
    public static void MyClickEventHandler()
    {
      MessageBox.Show ("接受到事件click");
    }
  在创建连接COM对象后设置就可以了:
    MyCom app=(MyCom)Marshal.GetActiveObject("MyCOM.Application");
    _IMyComEvents_ClickEventHandler clickHandler = 
         new _IMyComEvents_ClickEventHandler(MyClickEventHandler);
    app.Click +=clickHandler;

/////////////
下面关于多个连接点仍然有疑问:

如果只有一个连接点,它为default的:
[default, source] interface IStateEvent;
则Click回调可以那样直接用,但是如果定义多个连接点,在C#端如何添加支持呢?
例如,如果在另外一个连接点接口:[source] interface ICmdResultEvent;中定义了一个函数:
interface ICmdResultEvent : IUnknown
{
[helpstring("method NotifyCmdResult")] HRESULT NotifyCmdResult(CmdResultStruct cmdResult);
};
在C#中对这种非default属性的连接点函数怎样实现呢?
app.NotifyCmdResult +=clickHandler;//报错了!!!!!

谢谢。


 

2 个解决方案

#1


好像 VS2005 是自动生成 SINK 框架,只要绑定事件就行了

#2


UP

#1


好像 VS2005 是自动生成 SINK 框架,只要绑定事件就行了

#2


UP