C# 获取COM函数的地址时为什么发生异常?

C# 获取COM函数的地址时为什么发生异常?,c#,com,interop,vtable,typelib,C#,Com,Interop,Vtable,Typelib,我通过加载类型库(TLB)并使用ITypeLib和ITypeInfo迭代类型来获取COM函数的地址。 调用ITypeInfo的AddressOfMember函数后,我遇到以下异常: System.Runtime.InteropServices.COMException(0x800288BD):操作的模块类型错误。(在System.Runtime.InteropServices.ComTypes.ITypeInfo.AddressOfMember(Int32 memid、INVOKEKIND in

我通过加载类型库(TLB)并使用
ITypeLib
ITypeInfo
迭代类型来获取COM函数的地址。 调用ITypeInfo的
AddressOfMember
函数后,我遇到以下异常:

System.Runtime.InteropServices.COMException(0x800288BD):操作的模块类型错误。(在System.Runtime.InteropServices.ComTypes.ITypeInfo.AddressOfMember(Int32 memid、INVOKEKIND invKind、IntPtr&ppv)中的0x800288BD(TYPE_E_BADMODULEKIND))异常


如何消除此异常?

我不确定,以前没有做过这种事情,但您说您正在加载tlb文件?可能对于addressofmember,您需要加载包含com对象的dll,我认为tlb文件只是对接口的描述,因此addressofmember没有任何代码可加载。

您确定要获取地址的接口支持vtable绑定吗?我已经给出了IDispatch双接口实现的COM组件仍然失败的消息。更多关于我从IUnknown继承的所有接口,当GetNames(..)给我“QueryInterface”时,它在这里也失败了,这里的FUNCDESC.memid(一些例如1245781)似乎是错误的。我很奇怪,ITypeInfo和所有其他结构正确地列举了每件事,但AddressOfMember未能交付Address我认为所有IUnknown绑定的COM组件都是vtabled绑定的。