· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Вопрос по COM

Посл.отвђт Сообщенiе


Дата: Апр 23, 2004 15:51:47

Вытащил Typelib из одного приложения и пытаюсь теперь написать свое с теми же функциями. Собсно такой вопрос: интерфейс ITypeLib является наследником IUnknown или нет?


Дата: Апр 23, 2004 15:55:19

интерфейс ITypeLib является наследником IUnknown или нет?
Конечно, почему же нет.


Дата: Апр 23, 2004 17:28:55

Тогда у меня другой вопрос - делаю вызов функции GetTypeInfo он завершается ошибкой - в
отладчике вижу что он ожидает другое число параметров. Это если считать, что в начале
идут методы Addref, Release, QueryInterface. А если считать, что их там нет нет, то вызов
завершиться успешно (вернет 0). Получается что iunknown там нет.
coinvoke, dword[ptlib], GetTypeInfo, 0, ptinfo


Дата: Апр 23, 2004 18:19:01

Получается что iunknown там нет.

Логично рассуждаешь ;).

coinvoke, dword[ptlib], GetTypeInfo, 0, ptinfo

Значит, так. В студию просятся:
1. Код макроса coinvoke.
2. Значение GetTypeInfo (это константа?).

P.S. Не Addref, Release, QueryInterface, а QueryInterface, Addref, Release.


Дата: Апр 23, 2004 20:02:40

Loed
Вытащил Typelib из одного приложения
...
идут методы Addref, Release, QueryInterface. А если считать, что их там нет нет, то вызов
завершиться успешно (вернет 0). Получается что iunknown там нет.


Не понял... Если TypeLib уже есть, то зачем возиться с IUnknown и ITypeLib? Что мешает преобразовать typelib с помощью Tlb2Inc.exe и далее обращаться к нужному вам интерфейсу напрямую (через CoCreateInstanceEx)?


Дата: Апр 24, 2004 08:10:20 · Поправил: Loed

Quantum
Можно пооподробнее? где взять этот tbl2inc.exe? Он из tlb делает inc?

Hangatyr
macro coinvoke method, interface, [arg]
{
	if ~ arg eq
	reverse 
	pushd arg
	end if
	common
	pushd [interface]
	mov eax,[interface]
	mov eax,[eax]
	call dword[eax + method]
}
(это фасм)
GetTypeInfo равно 28H.


Дата: Апр 24, 2004 08:51:27

Loed
Да, он перегоняет tlb в инклуд для масма. Умеет доставать информацию прямо из ресурсов exe/dll. Лежит тут.


Дата: Апр 24, 2004 09:53:22

Loed

По моему проблемы с макросом. Операторные скобки if / end и reverse / common не вложенные, а перекраваются, что приводит к ошибке

Вот стандартный макро от Privalov'а:
macro comcall object,proc,[arg]
 { common
    if ~ arg eq
   reverse
     pushd arg
   common
    end if
    mov eax,[object#.#handle]
    push eax
    mov eax,[eax]
    call [eax+object#.#proc] }


Дата: Апр 24, 2004 09:59:09 · Поправил: Hangatyr

Loed
(это фасм)
Это я понял ;).

GetTypeInfo равно 28H.

Ума не приложу откуда взялось 28h. Порядок методов таков:
QueryInterface
Addref
Release
GetTypeInfoCount
GetTypeInfo
GetTypeInfoType
GetTypeInfoOfGuid
...
(дальше не помню)


Дата: Апр 24, 2004 13:20:29

Отлично! Всем спасибо всем ответившим. Я разобрался.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.101