我试图通过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;我真的不知道该怎么用。我期待一个可以通过MyService.Register(IEvents事件)实现并提供给服务的IUnknown接口……
我想我完全迷失在这里了.关于如何使用.NET正确实现COM+事件,有什么建议或参考吗?
发布于 2009-06-10 14:04:15
我仍然不确定EventClass到底有什么用,因为我发现你不需要使用它。我只是简单地声明一下:
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IMyEventIface
{
}然后将该接口作为IUnknown接口导出到Delphi。
然后,在您的ServicedComponent类上定义一个方法,该方法的连接签名如下:
public void Connect(IMyEventIface eventHandler)
{
mEvents.Add(eventHandler);
}这让您手动处理每个客户端事件处理程序的调用,但这是我找到的唯一方法。
https://stackoverflow.com/questions/969178
复制相似问题