Я получаю адрес функции COM путем загрузки библиотеки типов (TLB) и итерации по типам с использованием ITypeLib
и ITypeInfo
. После вызова функции AddressOfMember
ITypeInfo я столкнулся следующее исключение:Почему возникла ошибка получения адреса функции COM?
System.Runtime.InteropServices.COMException (0x800288BD): Неправильный вид модуля для работы. (Исключение из HRESULT: 0x800288BD (TYPE_E_BADMODULEKIND)) в System.Runtime.InteropServices.ComTypes.ITypeInfo.AddressOfMember (Int32 memid, INVOKEKIND invKind, IntPtr & ppv).
Как избавиться от этого исключения?
Вы уверены, что интерфейс, которому вы пытаетесь получить адрес, поддерживает привязки vtable вообще? – tyranid
Я дал ему IDispatch двойной интерфейс, реализованный COM-компонент все еще не работает. Более того, все интерфейсы, унаследованные от IUnknown, и когда GetNames (..) дали мне «QueryInterface», здесь тоже не получается, и здесь FUNCDESC.memid (некоторые, например, 1245781) казались неправильными. Я странно, что все вещи правильно перечислены с помощью ITypeInfo и всех других структур, но AddressOfMember не может передать адрес – Usman
. Я думаю, что все связанные с IUnknown COM-компоненты привязаны к vtabled. – Usman