我们有 IDL 项目,并且定义了 Enumeration 接口。它具有 ID = DISPID_NEWENUM 的属性(支持 for-each 等)。
由此我们生成互操作 dll。当我使用反射获取该接口的所有方法时,该方法将替换为 GetEnumerator 方法。
我可以通过反射以某种方式获得方法的真实名称(用 IDL 编写)吗?
感谢您的任何帮助。
我们有 IDL 项目,并且定义了 Enumeration 接口。它具有 ID = DISPID_NEWENUM 的属性(支持 for-each 等)。
由此我们生成互操作 dll。当我使用反射获取该接口的所有方法时,该方法将替换为 GetEnumerator 方法。
我可以通过反射以某种方式获得方法的真实名称(用 IDL 编写)吗?
感谢您的任何帮助。
您可以通过检索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
使您可以访问该类型的所有元数据,例如您可以阅读成员文档(如果在类型库中可用)等。