2010-12-15 7 views
0

私は過去数週間、この問題に夢中になります。私はプロパティの変更通知をC++ Comオブジェクトに送信する必要があるC#Comオブジェクトを持っています。 VBの同等機能は、次のようなコードを使用します。 PropertyChanged "propertyName"IPropertyNotifySinkを使用してC#からCOMにプロパティ変更通知を発行する方法?

C++では、ATLのCFirePropNotifyEventクラスを使用するのと同等です。

C++のCOMオブジェクトとVBのCOMオブジェクトは特殊なイベントインターフェイスを実装していないため、同等です。イベントをシンクする必要があるC++ COMオブジェクトは、IPropertyNotifySink、afaikをベースにしています。

C#での対応はなんですか? 私が試してみました:System.ComponentModel

  • からINotifyPropertyChangedの

    1. を私はIObjectWithSiteを実装し、IPropertyNotifySinkにsetSiteで受信されたサイトオブジェクトをキャストしようとしました。 私はC++のコードが使用するものであるC++/ATLでCFirePropNotifyEventのための同等のものを見つけることができません
      1. ..

    ..事前に

    感謝を...助けてください

  • 答えて

    1

    私は、.NETのINotifyPropertyChangedとCOMのINotifyPropertySinkの間にいくつかの自動ゲートウェイがあるとは思わない。

    .NETオブジェクトでCOMイベントを提供する場合は、これらの.NETオブジェクトにIConnectionPointContainerの実装を提供する必要があります。

    IConnectionPointContainerは、.NETにSystem.Runtime.InteropServices.ComTypeの名前空間に既に存在します。

    +0

    hmm ..良い点..私は(失敗した)その実装に行ってきました。何か助けがありますか(ジェネリックimpl/sample ??) – user543923

    +0

    それは見つけるのが難しいです。本当にこのルートに行きたい場合は、Reflectorでダイビングし、AciveXオブジェクトのCLRラッパーであるAxHostクラスの周りを見てみることをお勧めします。それは文書化されていませんが、反射板はそれについて多くを教えることができます。それ以外の場合は、デリゲート、コールバックなどを使用して、独自の「イベントのような」メカニズムに助言することができます。可能であれば、それははるかに簡単です。 –

    関連する問題