2009-06-09 87 views
0

我试图通过COM访问我的应用程序的某些部分,主要是因为我需要一个Delphi应用程序能够调用.NET应用程序上的某些服务。COM +事件与C#和NET

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

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

public interface IEvents 
{ 
    void OnMessage(); 
} 

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

但是当我从德尔福导入的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事件)实现并提供服务...

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

回答

1

我仍然不确定使用EventClass到底是什么,我发现你不需要使用它。我只是声明了这一点:

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

并且随着接口被导出为Delphi的IUnknown接口。

然后你在你的ServicedComponent类定义一个方法,一个连接的签名是这样的:

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

留下您手动处理每一个客户事件处理程序的调用,但我发现的唯一途径。