获取C#中IDL中定义的方法的真实姓名

时间:2012-09-24 08:24:39

标签: c# reflection com idl enumerator

我们有IDL的项目,并且有与Enumeration的定义接口。它具有ID = DISPID_NEWENUM的属性(支持for-each等)。

由此我们生成interop dll。当我使用反射来获取该接口的所有方法时,此方法将替换为GetEnumerator方法。

我可以用反射以某种方式得到方法的真实名称(用IDL编写)吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分: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可让您访问该类型的所有元数据,例如:您可以阅读会员文档(如果在类型库中可用)等。