TLB, idl, odl, MIDL и пр.

Обсуждение вопросов, касающихся указанной технологии.
arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1598
Зарегистрирован: 23.01.2008 (Ср) 14:35

TLB, idl, odl, MIDL и пр.

Сообщение arthur2 » 02.04.2014 (Ср) 17:19

Поскольку сейчас разбираюсь с тлб, как их делать и использовать, вопросов постоянно возникает много. Так что буду их выкладывать сюда по мере возникновения :

1. Поскольку MkTypLib пока что мне нравится значительно больше, чем midl, вопрос первый: в чем различия между синтаксисом odl и idl? На сколько я понимаю, oleViewer декомпилирует именно в идл. А есть ли что-то, что декомпилирует в одл? И вообще - есть ли ещё какие-нибудь декомпиляторы тлб, кроме этого убогого? Самое странное и досадное, что код после декомпиляции ой как не всегда компилируется обратно. То есть, разобрать тлб, что-то там поправить, а потом собрать обратно - не всегда получается.

2. Есть ли ещё какие-нибудь тулзы для компиляции тлб, кроме MkTypLib и MIDL? На сколько я понимаю, такую компиляцию можно как-то делать через апи - так может существует-таки тулза, которая делает тлб без этих посредников? Ценнее всего было бы что-то вроде бейсиковского object brawser-a, но с возможностью редактирования :)

3. Можно ли изменить тлб, вшитую в ActiveX? Например, дописать туда модульные функции?

5. Вопросы по idl/odl. В бейсике можно объявить переменную или константу с любыми знаками в имени, заключив имя в квадратные скобки. Как прописать то же в идл/одл?

6. Пишу importlib("my.tlb"); , сама тлб лежит в той же папке, что и идл - мидл говорит, что файла не нашел. Можно ли сделать, чтобы находил, не перекладывая сам файл?
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16116
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: TLB, idl, odl, MIDL и пр.

Сообщение Хакер » 03.04.2014 (Чт) 19:16

Моя конвенция на оставшуюся часть топика: MIDL — язык, midl — программа-компилятор для этого языка.

arthur2 писал(а):вопрос первый: в чем различия между синтаксисом odl и idl?

MIDL растёт из IDL из открытого стандарта DCE/RPC.
MIDL включает в себя ODL.

arthur2 писал(а): oleViewer декомпилирует именно в идл

Сложно сказать.

arthur2 писал(а):И вообще - есть ли ещё какие-нибудь декомпиляторы тлб, кроме этого убогого?

У меня есть самодельный командно-строчный. Правда декомпилирует он в какой-то гибрид IDL и самопридуманого языка. Цель написания очень уж прикладная была — реверс-инжениринг десятков версий сотен ActiveX-библиотек одного гигантского продукта.

arthur2 писал(а):Есть ли ещё какие-нибудь тулзы для компиляции тлб, кроме MkTypLib и MIDL?

Наверное.

arthur2 писал(а):Можно ли изменить тлб, вшитую в ActiveX? Например, дописать туда модульные функции?

Саму TLB можно, иначе не было бы топика про msvbvm61. Подмена ресурса в большинстве случаев возможна, но в общем случае не имеет гарантированной осуществимости.

arthur2 писал(а):Как прописать то же в идл/одл?

Никак.

arthur2 писал(а):мидл говорит, что файла не нашел. Можно ли сделать, чтобы находил, не перекладывая сам файл?

Наверняка буду прав, если скажу, что надо зарегистрировать tlb-шку.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1598
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: TLB, idl, odl, MIDL и пр.

Сообщение arthur2 » 09.04.2014 (Ср) 20:52

А твой самодельный обратно в тлб компилирует?

Хакер писал(а):Никак
Но ведь в самой тлб такие энумы вполне могут быть! Почему же в языке нет возможности так сделать?

Дополнительные ремарки к параметрам функций: [in],[out] они что дают? я имею ввиду, чем физически будет отличаться вызов функций, в которых такие ремарки у параметров указаны и в которых нет?

Можно ли объявить константу типа вариант с определенным значением и подтипом?
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16116
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: TLB, idl, odl, MIDL и пр.

Сообщение Хакер » 09.04.2014 (Ср) 21:07

arthur2 писал(а):А твой самодельный обратно в тлб компилирует?

Нет, такой задачи не было.

arthur2 писал(а):Дополнительные ремарки к параметрам функций: [in],[out] они что дают? я имею ввиду, чем физически будет отличаться вызов функций, в которых такие ремарки у параметров указаны и в которых нет?

Имеет значение при маршалинге вызовов. Корни у этого растут из DCE/RPC. Тебе нужно почитать этот открытый стандарт, чтобы понять, где лежат границы между DCE/RPC и MS-ORPC, и насколько COM вообще самостоятелен, а насколько он продолжает линию других стандартов/технологий.

arthur2 писал(а):Почему же в языке нет возможности так сделать?

Потому что язык наследуется от языка IDL, который определён стандартом DCE/RPC. А там такой возможности нет.

arthur2 писал(а):Можно ли объявить константу типа вариант с определенным значением и подтипом?

Где? Как? В энуме?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1598
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: TLB, idl, odl, MIDL и пр.

Сообщение arthur2 » 11.04.2014 (Пт) 16:28

Хакер писал(а):Потому что язык наследуется от языка IDL, который определён стандартом DCE/RPC.
Где посмотреть этот стандарт? гугл с яндексом дает мне только его описание.

Хакер писал(а):Где? Как? В энуме?
Нет, просто константу. Скажем, более обще: можно ли объявить константу типа UDT с определенными значениями полей?
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16116
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: TLB, idl, odl, MIDL и пр.

Сообщение Хакер » 11.04.2014 (Пт) 19:20

arthur2 писал(а):Где посмотреть этот стандарт? гугл с яндексом дает мне только его описание.

http://pubs.opengroup.org/onlinepubs/9629399/toc.pdf


arthur2 писал(а):Скажем, более обще: можно ли объявить константу типа UDT с определенными значениями полей?

Ну попробуй. Я не знаю точно. Тут три четыре уровня: допускает ли сам формат TLB, допускает ли стандартная объектная модель, допускают ли компиляторы, допускают ли потребители (в т.ч. VB IDE).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1598
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: TLB, idl, odl, MIDL и пр.

Сообщение arthur2 » 11.04.2014 (Пт) 19:43

Хакер писал(а):Ну попробуй.
Не могу сообразить, как это выразить синтаксически, чтобы попробовать :)
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16116
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: TLB, idl, odl, MIDL и пр.

Сообщение Хакер » 11.04.2014 (Пт) 19:50

arthur2 писал(а):Не могу сообразить, как это выразить синтаксически, чтобы попробоват

Этим ты проверяешь только предпоследний уровень.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1598
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: TLB, idl, odl, MIDL и пр.

Сообщение arthur2 » 11.04.2014 (Пт) 20:25

Собственно, попробовал вот так: const TTT M={1,2}; . Получил:
D:\googledisk\makeTlb\tlb\const2.odl(16) : warning MIDL2149 : compound initializ
ers are not supported

midl : error MIDL9008 : internal compiler problem 0xc0000005 - the compiler cann
ot continue for an unknown reason. See documentation for suggestions on how to f
ind a workaround.


Собственно, если я правильно понял, получается, не поддерживается :( По меньшей мере, языком. А в обход, думаю, смысла нет - проще переменные проинициировать.
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16116
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: TLB, idl, odl, MIDL и пр.

Сообщение Хакер » 11.04.2014 (Пт) 20:26

Для UUID-ов было бы очень полезно. Если совпадёт и случится чудо и окажется, что VB будет поддерживать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1598
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: TLB, idl, odl, MIDL и пр.

Сообщение arthur2 » 11.04.2014 (Пт) 21:00

Мидлом (хоть языком, хоть компилятором), я так понял, не удастся. Проверить, будет ли жить такая константа в тлб - это нужно самому делать тлб, без мидла. Как к такому подступиться - не знаю.
Артур
 
   


Вернуться в OLE / COM / ActiveX

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList