|
|
| Посл.отвђт | Сообщен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 |