1

IDL を使用したプロジェクトがあり、Enumeration との定義されたインターフェイスがあります。ID = DISPID_NEWENUM のプロパティがあります (for-each などのサポート)。

これから、interop dll を生成します。リフレクションを使用してそのインターフェイスのすべてのメソッドを取得すると、このメソッドは GetEnumerator メソッドに置き換えられます。

メソッドの本当の名前(IDLで書かれている)をリフレクションでどうにか取得することはできますか?

助けてくれてありがとう。

4

1 に答える 1

2

TypeInfoタイプのインスタンスを取得し、DISPID_NEWENUM dispid でマークされたメソッドの名前を読み取ることで、これを行うことができます。次に例を示します。

  using System.Runtime.InteropServices;
  using System.Runtime.InteropServices.ComTypes;

  var tiPtr = Marshal.GetITypeInfoForType(typeof (IMyInterface));
  var ti = (ITypeInfo)Marshal.GetObjectForIUnknown(tiPtr);

  string[] names = new string[1];
  int cnt;
  ti.GetNames(-4, names, 1, out cnt); // -4 = DISPID_NEWENUM
  // string[0] == "_NewEnum"

ITypeInfo型のすべてのメタデータへのアクセスを提供します。たとえば、メンバー ドキュメント (タイプ ライブラリで利用可能な場合) を読むことができます。

于 2012-09-24T08:51:16.940 に答える