0

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

我已经设法通过从 ServicedComponent 类继承的 COM 公开了一些方法,并且工作正常。

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

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;

我真的不知道如何使用。我期待一个 IUnknown 接口,我可以通过 MyService.Register(IEvents events) 实现并提供给服务......

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

4

1 回答 1

1

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

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

并且该接口作为 IUnknown 接口导出到 Delphi。

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

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

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

于 2009-06-10T14:04:14.580 回答