2009-06-09 85 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); 
} 

留下您手動處理每一個客戶事件處理程序的調用,但我發現的唯一途徑。