2010-05-13 39 views
3

我通過加載類型庫(TLB)並使用ITypeLibITypeInfo迭代類型來獲取COM函數的地址。 調用的ITypeInfo的AddressOfMember功能後,我面臨着以下異常:爲什麼異常發生獲取COM函數的地址?

System.Runtime.InteropServices.COMException(0x800288BD):錯誤的模塊種類的操作。 (來自HRESULT的異常:0x800288BD(TYPE_E_BADMODULEKIND))在System.Runtime.InteropServices.ComTypes.ITypeInfo.AddressOfMember(Int32 memid,INVOKEKIND invKind,IntPtr & ppv)。

如何擺脫此異常?

+0

你確定你試圖獲取地址的接口支持vtable綁定嗎? – tyranid 2010-05-15 07:44:49

+0

我已經給它IDispatch雙接口實現COM組件仍然失敗。當我的所有接口都從IUnknown繼承而來,當GetNames(..)給我「QueryInterface」時,它在這裏也失敗了,這裏的FUNCDESC.memid(一些例如1245781)似乎是錯誤的。 我很奇怪用ITypeInfo和其他所有結構正確列舉的所有東西,但AddressOfMember無法提供地址 – Usman 2010-05-15 08:34:22

+0

我認爲所有IUnknown綁定的COM組件都綁定了vtabled。 – Usman 2010-05-15 08:34:54

回答

1

我不確定,以前沒有做過這種類型的事情,但是你說你正在加載tlb文件?可能是因爲對於成員地址你需要加載包含com對象的dll,我認爲tlb文件只是對接口的描述,因此addressofmember將不會有任何代碼加載。

相關問題