首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用c#和.NET的COM+事件

使用c#和.NET的COM+事件
EN

Stack Overflow用户
提问于 2009-06-09 09:59:49
回答 1查看 1.1K关注 0票数 0

我试图通过COM访问我的应用程序的某些部分,主要是因为我需要一个Delphi应用程序来调用.NET应用程序上的某些服务。

我已经设法通过继承自ServicedComponent类的COM公开了一些方法,而且它工作得很好。

现在,我需要能够向客户端引发事件,以便在发生某些事情时向他发出警报。我目前有这样的东西:

代码语言:javascript
复制
public interface IEvents
{
  void OnMessage();
}

[EventClass]    
[ComVisible(true)]
public class MyEventsClass : ServicedComponent, IEvents
{
  public void OnMessage()
  {
  }
}

但是,当我从Delphi导入TypeLibrary时,我得到的结果是:

代码语言:javascript
复制
IEvents = interface(IDispatch)
    ['{E7605303-F968-3509-829B-BF70084053C4}']
    procedure OnMessage; safecall;
  end;

IEventsDisp = dispinterface
    ['{E7605303-F968-3509-829B-BF70084053C4}']
    procedure OnMessage; dispid 1610743808;
  end;

我真的不知道该怎么用。我期待一个可以通过MyService.Register(IEvents事件)实现并提供给服务的IUnknown接口……

我想我完全迷失在这里了.关于如何使用.NET正确实现COM+事件,有什么建议或参考吗?

EN

回答 1

Stack Overflow用户

发布于 2009-06-10 14:04:15

我仍然不确定EventClass到底有什么用,因为我发现你不需要使用它。我只是简单地声明一下:

代码语言:javascript
复制
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IMyEventIface
{
}

然后将该接口作为IUnknown接口导出到Delphi。

然后,在您的ServicedComponent类上定义一个方法,该方法的连接签名如下:

代码语言:javascript
复制
public void Connect(IMyEventIface eventHandler)
{
  mEvents.Add(eventHandler);
}

这让您手动处理每个客户端事件处理程序的调用,但这是我找到的唯一方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/969178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档