繁体   English   中英

使用C#和.NET的COM +事件

[英]COM+ events with c# and .NET

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

我设法通过COM继承了一些方法,这些方法继承自ServicedComponent类,并且工作正常。

现在,我需要能够向客户提出事件,以便在发生某些事情时可以提醒他。 我目前有这样的事情:

public interface IEvents
{
  void OnMessage();
}

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

但是当我从Delphi导入TypeLibrary时,我得到了:

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 events)实现并提供给服务的IUnknown接口。

我想我在这里完全迷路了。关于如何使用.NET正确实现COM +事件的任何建议或参考?

我仍然不确定EventClass的确切用途,因为我发现您不需要使用它。 我只是声明了这一点:

[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IMyEventIface
{
}

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

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

public void Connect(IMyEventIface eventHandler)
{
  mEvents.Add(eventHandler);
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM