2011-02-10 2 views
4

IDynamicMetaObjectProviderを使用してCOMオブジェクトをイントロスペクションするにはどうすればよいですか?具体的には、任意のCOMオブジェクトを指定すると、キーがプロパティ名で、ValueがCOMオブジェクトのプロパティの文字列値であるDictionaryを返したい(プロパティ値が文字列でない場合はスキップする) 。System.Dynamicを使用してCOMオブジェクトをイントロスペクションする

実行時にこのようにプロパティ名とその値を取得するにはどうすればよいですか?

+0

dyn.GetType()。GetProperties()などのようにReflectionを使用してください。 –

+0

@Hansそれは動作していないようで、ComObjectの静的プロパティを返します。 –

+0

私のマシンでうまく動作しました。参照がオブジェクトではなく動的な型であることを確認してください。そして、COMサーバーはIDispatchを実装します。 –

答えて

1

本当にできません。オブジェクトは動的な機能を提供するためにIDynamicMetaObjectProviderを実装する必要はありませんが、バインディングプロセスで貢献できるフックです。

このような操作を行うには、メンバーと値を取得するためにReflectionを使用する必要があります。

+0

System .__ ComObjectは、VSデバッガビューで動的オブジェクトとして評価することができるので、そうするように思われます –

+0

これはいくつかの追加ヘルプを追加する可能性があります。http://www.eggheadcafe.com/software/aspnet/30919888/introspecting-com -object-in-c.aspx –

+0

@Paul Betts: 'System .__ ComObject'を' IDynamicMetaObjectProvider'にキャストできますか?もしそうなら、なぜコードで直接キャストを実行しないのですか?それはかなり簡単だったでしょうか? – casperOne

関連する問題