2009-06-09 13 views
0

.NETアプリケーションで特定のサービスを呼び出せるようにするには、主にDelphiアプリケーションが必要なため、COM経由でアプリケーションの特定の部分にアクセスしようとしています。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; 

。私は実装でき、MyService.Register(IEventsイベント)を通じてサービスに提供することができるIUnknownインターフェイスを期待していました...

私はここで完全に失われていると思います...どのように正しく.NETでCOM +イベントを実装しますか?

答えて

1

私はあなたがそれを使用する必要がないことを発見して、EventClassの使用が正確であるかまだ分かりません。私は単にこれを宣言しました:

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

そして、インターフェイスはDelphiにIUnknownインターフェイスとしてエクスポートされます。

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

手動で各クライアントのイベントハンドラの呼び出しを処理するためにあなたを残したが、私が見つけた唯一の方法である:

次に、あなたがこのような接続署名あなたのServicedComponentクラスのメソッドを定義します。

関連する問題