COM+;使用c#和.NET的事件
我试图通过COM访问应用程序的某些部分,主要是因为我需要一个Delphi应用程序来调用.NET应用程序上的某些服务 我已经设法通过从ServicedComponent类继承的COM公开了一些方法,并且工作正常 现在,我需要能够向客户提出事件,以便在发生某些事情时提醒他。我现在有这样的东西:COM+;使用c#和.NET的事件,c#,.net,com+,C#,.net,Com+,我试图通过COM访问应用程序的某些部分,主要是因为我需要一个Delphi应用程序来调用.NET应用程序上的某些服务 我已经设法通过从ServicedComponent类继承的COM公开了一些方法,并且工作正常 现在,我需要能够向客户提出事件,以便在发生某些事情时提醒他。我现在有这样的东西: public interface IEvents { void OnMessage(); } [EventClass] [ComVisible(true)] public class MyEve
public interface IEvents
{
void OnMessage();
}
[EventClass]
[ComVisible(true)]
public class MyEventsClass : ServicedComponent, IEvents
{
public void OnMessage()
{
}
}
public void Connect(IMyEventIface eventHandler)
{
mEvents.Add(eventHandler);
}
但是,当我从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(IEEvents事件)实现并提供给服务
我想我在这里完全迷路了。。。关于如何正确地使用.NET实现COM+事件,有什么建议或参考吗?我仍然不确定EventClass的确切用途,因为我发现您不需要使用它。我只是宣布:
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IMyEventIface
{
}
然后,该接口作为IUnknown接口导出到Delphi
然后在ServicedComponent类上定义一个方法,该方法包含如下连接签名:
public interface IEvents
{
void OnMessage();
}
[EventClass]
[ComVisible(true)]
public class MyEventsClass : ServicedComponent, IEvents
{
public void OnMessage()
{
}
}
public void Connect(IMyEventIface eventHandler)
{
mEvents.Add(eventHandler);
}
这让您可以手动处理每个客户端事件处理程序的调用,但这是我找到的唯一方法