我正在使用C#(.NET)应用程序中的一些非托管类型库和引用文件来从中获取信息,例如它们包含的接口,函数,枚举等。我目前有一个ComTypes.ITypeInfo类型的对象,它代表一个coclass。我已经编写了一些代码来获取coclass的名称,但我真正想要的是该coclass中包含的所有接口名称的列表。我找不到任何容易访问的" System.Runtime.InteropServices.ComTypes命名空间中的属性,为了达到这个目的,我目前正在使用ITypeInfo.CreateInstance。根据我的理解,通过这样做,我可以得到一个Object类型的COM对象,然后从中获取所需的信息(我是COM的初学者,所以请随时指出我不正确的地方)。 / p>
我可以一直到达我已经成功地在一个coclass上进行调用的地方,然后找到了一个类型为" object {System .__ ComObject}"的对象,但是我'我不知道从哪里去。如何使用此coclass COM对象获取其包含的接口的名称?这是我用来获取coclass COM对象的代码:
//Assume the ti object below is already initialized as an object of TYPEKIND.TKIND_COCLASS
ComTypes.ITypeInfo ti;
if(//Condition where we know ti is a coclass)
{
try
{
int href;
Object obj;
for (var i = 0; i < tiTypeAttr.cImplTypes; i++)
{
ti.GetRefTypeOfImplType(i, out href);
ComTypes.ITypeInfo newTi;
ti.GetRefTypeInfo(href, out newTi);
if (newTi != null)
{
IntPtr attrP;
ComTypes.TYPEATTR attr;
newTi.GetTypeAttr(out attrP);
attr = (ComTypes.TYPEATTR)Marshal.PtrToStructure(attrP, typeof(ComTypes.TYPEATTR));
if (attr.typekind == ComTypes.TYPEKIND.TKIND_INTERFACE || attr.typekind == ComTypes.TYPEKIND.TKIND_DISPATCH)
{
Guid iid = attr.guid;
ti.CreateInstance(null, iid, out obj);
//STUCK HERE: Do stuff with obj to acquire the interface names within it
newTi.ReleaseTypeAttr(attrP);
}
}
}
}
catch(Exception e)
{Console.WriteLine(e);}
}
有没有办法使用Object obj来获取我正在寻找的信息?或者有一种更简单的方法/方式吗?谢谢!