2010-05-13 3 views
3

Я получаю адрес функции 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).

Как избавиться от этого исключения?

+0

Вы уверены, что интерфейс, которому вы пытаетесь получить адрес, поддерживает привязки vtable вообще? – tyranid

+0

Я дал ему IDispatch двойной интерфейс, реализованный COM-компонент все еще не работает. Более того, все интерфейсы, унаследованные от IUnknown, и когда GetNames (..) дали мне «QueryInterface», здесь тоже не получается, и здесь FUNCDESC.memid (некоторые, например, 1245781) казались неправильными. Я странно, что все вещи правильно перечислены с помощью ITypeInfo и всех других структур, но AddressOfMember не может передать адрес – Usman

+0

. Я думаю, что все связанные с IUnknown COM-компоненты привязаны к vtabled. – Usman

ответ

1

Я не уверен, раньше этого не делал, но вы говорите, что загружаете файл tlb? Возможно, что для addressofmember вам нужно загрузить DLL, которая содержит объект com, я думал, что tlb-файл был просто описанием интерфейсов, и, таким образом, у addressofmember не было бы никакого кода для загрузки.