2011-11-07 10 views
4

まずは、私はCOMの初心者です。C#のリフレクションがCOM(およびC++)で動作しない

私は大きなプロジェクトでチームに勤めています。サーバー部分はC++で書かれています。クライアント側はC#で書かれています。 COM経由で通信します。

今、私はC#でIAを持っています。オブジェクトはです。タイプはクラスです(C++ではIAを実装していますが、COM経由で何とか転送されます)。そのタイプのすべてのプロパティを取得するためにリフレクションを使用したいが、正しく機能していない。私は自分のコードで使ったプロパティだけを返します。ここで

は、プロパティを取得リフレクションコードです:

Type[] ifaces = typeof(A).GetIterfaces(); 
foreach (Type iface in ifaces) 
{ 
    foreach (PropertyInfo info in iface.GetProperties()) 
    { 
     // it takes only those properties, I have used in C# code 
    } 
} 

まず、私はそれが原因COMの作業ていないと思いました。しかし、それは私がコードで言及するすべてのプロパティを私に与えてくれるのは不思議です。そして、COMの周りのものはすべて、私がこのプロジェクトに入る前に、長い間働いているので、正しく書かれているはずです。

答えて

1

問題はEmbed interopタイプにありました。私はTrueからFalseに切り替えて動作しています。

1

これはあなたを助けるかもしれない:Using Reflection with COM Interop

プロパティ名用可能なオプションを知っている場合にのみ役立つだろうあなたは分からないが、それらを一覧表示したい場合、あなたはTLBファイルに飛び込むが必要になる場合があります。 typelibをロードしてAssemblyBuilderクラスを取得する方法の良い例はhereです。 AssemblyBuilder.GetExportedTypesメソッドは、TLBで定義されているすべての型を返す必要があります。これらの型でリフレクションを使用できます。

私はこれに苦労しています。もしそれがうまくいけば、ここに解決策を投稿することができます。

+0

はい。問題は、私はプロパティについて何も知らないということです。また、将来変更することもできます。削除するか、新しいものを追加するか、既存の名前を変更します。とにかくありがとう。 :) – zacharmarz

+0

@zacharmarz更新を確認し、TLB分析ツールに関する情報を追加しました。 – zmilojko

関連する問題