Написание IDL под TLB

Обсуждение вопросов, касающихся указанной технологии.
kiber_punk
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 11.01.2011 (Вт) 2:23

Написание IDL под TLB

Сообщение kiber_punk » 03.02.2012 (Пт) 9:56

Хочу поинтересоваться, как же пишутся tlb, в частности для WinAPI?
С IDL'ом почти не работал. А ещё и Vtbl нужно организовывать...В общем тёмный лес.

И примеров негде не видно.

Есть ли специалисты в этом деле? Есть, я знаю :)
Буду очень благодарен за минимальный пример с любой из функций.

Но главный вопрос который меня терзает - можно ли реализовать это через IDispatch и прикрутить идентификаторы (ProgID/CLSID)?
Mea culpa

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

Re: Написание IDL под TLB

Сообщение Хакер » 03.02.2012 (Пт) 16:12

kiber_punk писал(а):Хочу поинтересоваться, как же пишутся tlb,

Открывается блокнот (нет подсветки синтаксиса) или MSVC6 (есть подсветка синтаксиса), или какой-то другой редактор, и пишутся.

в частности для WinAPI?

Так же, как и вообще (см. выше).

С IDL'ом почти не работал. А ещё и Vtbl нужно организовывать...В общем тёмный лес.

При написалии TLB-шки Vtable не нужно организовывать. Ни вообще, ни при написании TLB-шки с описанием WinAPI-функий в частности. При написании TLB-шки, которая описывает WinAPI-функции, описывается один или несколько модулей, в каждом модуле описываются интересующие функции. Для каждого модуля в исходнике должна быть указана dll-библиотека, экспортирующая функции. Для каждой функции в модуле может быть указано имя функции в том виде, в котором она экспортируется, исходя из того, что экспортное имя может отличаться от имени, присвоенного функции автором TLB-шки.

И примеров негде не видно.

Враньё. Примеров более чем очень много. Даже в моей статье в википедии есть пример. Там же есть и пример объявления


Но главный вопрос который меня терзает - можно ли реализовать это через IDispatch и прикрутить идентификаторы (ProgID/CLSID)?

А вот это конкретная чушь.
«Мне нужно разбить газон. Можно ли это реализовать через дверной проём и прикрутить РНН».

Функции, экспортируемые библиотеками, описываются как члены модулей. Модули — это одно.
IDispatch — это один из интерфейсов, уже придуманый кое-кем и с определённым смыслом и предназначением. Интерфейсы — это совершенно другое. Они не имеют никакого отношения к модулям и их членам.
CLSID это идентификатор класса. Класс — это вообще третье. Класс это не модуль. Класс это не интерфейс. Модуль это не интерфейс.

Класс, интерфейс, модуль — три разных понятия.

Функции из экспортируемых библиотек имеют отношения только к модулям.
Vtable-ы имеет отношение только к интерфейсам.
CLSID-ы имет отношения только к классам.

ProgId это человеко-понятный идентификатор, аналогичный по функциональности СLSID-у.

У любого COM-класса есть CLSID, один и только один.
У любого COM-класса может быть ProgId, а может и не быть его.
COM-класс позволяет плодить сколько угодно COM-объектов — экземпляров этого класса.
Понятие COM-объекта не определено как-либо, кроме как нечто, у чего наличествует один или более COM-интерфейс.
Общения с COM-объектом никогда не бывает, бывает только общение с COM-интерфейсом.
Не существует способа по COM-интерфейсу определить COM-объект, которому принедлежит интерфейс, хотя бы потому, что сущность объекта нигде не определена, определена только сущность интерфейса.
У СOM-объекта может сколько угодно COM-интерфейсов, но должен быть как минимум один (IUnknown).
Не существует какого-либо способа определить, что два разных COM-интерфейса относятся к одному COM-объекту, кроме как запрос у обоих интерфейсов интерфейса IUnknown и сравнения значений интерфейсных-указателей. Если два разных интерфейса вернули одинаковый указатель на IUnknown, то эти два интерфейса принадлежат одному объекту.
Не любой COM-объект является экземпляром какого-либо COM-класса. То есть не для любого COM-объекта обязательно нашёлся бы соответствующий COM-класс, некоторые объекты родились на свет способом, отличным от порождения экземпляра класса. Это важно, многие не понимают этого.
Поскольку в общем случае COM-объект не обязан быть экземпляром какого-то COM-класса, не существует общего способа для любого объекта установить информацию о классе объекта. Для объектов, которые являются экземплярами какого-то класса, возможно получить такую информацию, если объекты поддерживают интерфейс IProvideClassInfo, наряду с др. интерфейсами.

Модули, в которых описаны функции, экспортируемые dll-библиотеками, не имеют никакого отношения ни к классам, ни к интерфейсам. Модули — они сами по себе. У них нет и не может быть ни Vtable, ни IID-а, ни CLSID-а, ни ProgId-а.

Идентификатор интерфейса называется IID-ом.
Идентификатор класса называется CLSID-ом. Текстовый идентификатор класса называется ProgId-ом. Он, если и бывает, то только у классов (никогда не бывает у интерфейсов).

Может быть 5 объектов разных классов, поддерживающие каждый одинакоывй набор из 29 интерфейсов.

Описание интерфейса в TLB сводится к описанию IID-а интерфейса и описания всех его членов.
Описание класса в TLB сводится к описанию CLSID-а класса и описанию одного или нескольких интерфейсов, которые будут поддерживаться любым экземпляром данного класса.

Реализация интерфейсов объекта, реализация класса (включая создание нового экземпляра класса) не имеет никакого отношения к TLB.

Два объекта, поддерживающих один и тот же интерфейс (в числе прочих интерфейсов) могут иметь совершенно разную реализацию этого интерфейса.

Два объекта, являющихся объектами одного класса, обязаны иметь одинаковую реализацию всех интерфейсов.


Если у класса меняется что-либо (поведение одного из методов любого из интерфейсов, или набор интерфейсов), изменённый класс обязан иметь новый CLSID.
Если у интерфейса меняется что-либо, интерфейс обязан получить новый IID.

IID является своего рода слепком, хешем и контрольной суммой от всех значащих параметров интерфейса (набор членов, набор параметров каждого из членов).

CLSID является своего рода слепком, хешем и контрольной суммы всей совокупности поведения, присущего классу.

Имена классов и интерфейсов могут быть разными для принципиально одного класса, или одинаковыми для принципиально разных классов, и интересны лишь для средств разработки.

IID-ы и CLSID-ы должны быть уникальными и служить тому, что описано выше.

У моделей есть свой уникальный идентификатор, который не имеет своего самостоятельного названия.

Нельзя запросить у кого-либо создание интерфейса, указав IID.
Нельзя запросить у кого-либо создание класса, указав CLSID/ProgId.
Нельзя запросить у кого-либо создание модуля, указав UUID модуля.

Можно запросить у кого-либо интерфейс, указав IID. Поскольку любой COM-интерфейс унаследован от интерфейса IUnknown, любой интерфейс имеет метод QueryInterface, поэтоу у любого интерфейса можно запросить любой другой интерфейс.

Можно запросить у кого-либо создание экземпляра класса, указав CLSID или ProgId. Возвращается при этом не ссылка на объект, а ссылка на интерфейс объекта.

Можно запросить у кого-либо создание нового объекта или возврат ссылки на какой-либо интерфейс уже существующего объекта.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kiber_punk
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 11.01.2011 (Вт) 2:23

Re: Написание IDL под TLB

Сообщение kiber_punk » 04.02.2012 (Сб) 0:36

Хакер писал(а):
И примеров негде не видно.

Враньё.

Почему же враньё? Я же не сказал что их нет, их не видно.
Инфы совсем немного, а про винапи'шный tlb-хак вообще мало кто знает.
Вчера перерыл много ресурсов в поисках win32.old (осходника win32.tlb) но ничего нет.
Искал статью из журнала «Компьютер Пресс» с описанием IDL'а и примером создания tlb'шек, упомяную тут, но тщетно.

Примеров более чем очень много. Даже в моей статье в википедии есть пример. Там же есть и пример объявления

О, а раньше я его не замечал (сиже под проксей opera-mini, а оно режет эти вставки). Спасибо!
Сижу разбираюсь...
Хакер, что нужно чтобы его скомпилировать и какие ключи подставить в midl?

Но главный вопрос который меня терзает - можно ли реализовать это через IDispatch и прикрутить идентификаторы (ProgID/CLSID)?

А вот это конкретная чушь.


Хорошо, чтобы не понаписать ляпов, переформулирую - можно ли увязать такую tlb с Automation (для вызова через CreateObject например)?
Упомянутые идентификаторы задаются в idl'е, ведь так?
Просветите, если не трудно.
Mea culpa

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

Re: Написание IDL под TLB

Сообщение Хакер » 04.02.2012 (Сб) 0:53

kiber_punk писал(а):Инфы совсем немного, а про винапи'шный tlb-хак вообще мало кто знает.

Потому что это не хак, а штатная возможность для любых DLL, экспортирующих функции.
Читать официальный хелп по module. Волшебным образом там есть пример.

Вчера перерыл много ресурсов в поисках win32.old (осходника win32.tlb) но ничего нет.

Любая tlb-шка может быть обратно декомпилирована (с учётом потери комментариев) с помощью утилиты OleView из VS6.

Хакер, что нужно чтобы его скомпилировать и какие ключи подставить в midl?

Варианты решения проблемы:
  1. Запустить midl /help
  2. Прочитать MIDL Command-Line Reference

Хорошо, чтобы не понаписать ляпов, переформулирую - можно ли увязать такую tlb с Automation (CreateObject и др.)?

CreateObject создаёт объект указанного класса. Причём тут модуль, о котором идёт речь?
Это всё равно, что спрашивать «можно ли посмотреть порнофиьм в детской библиотеке». Нельзя н только потому, что в детском учреждении не может быть порно, но и потому что книги и фильмы — разные вещи.

Упомянутые идентификаторы задаются в idl'е, ведь так?
Просветите, если не трудно.

Ну да.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Написание IDL под TLB

Сообщение ger_kar » 04.02.2012 (Сб) 13:08

Хакер писал(а):Любая tlb-шка может быть обратно декомпилирована (с учётом потери комментариев) с помощью утилиты OleView из VS6.

Т.е. то что мы видим в окне OleView и есть декомпилированная TLB?
А для того, что-бы что-то изменить, надо оттуда скопипастить в блокнот, внести изменения и снова компилировать через командную строку?
В век визуальных технологий и виртуальной реальности TLB'шки делаются так гемморно используя совсем отсталые технологии ;).
Бороться и искать, найти и перепрятать

kiber_punk
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 11.01.2011 (Вт) 2:23

Re: Написание IDL под TLB

Сообщение kiber_punk » 04.02.2012 (Сб) 15:12

ger_kar:
В век визуальных технологий и виртуальной реальности TLB'шки делаются так гемморно используя совсем отсталые технологии .

Вообщето они создаются автоматически. И внедряются непосредственно в ресурсы (в VB наприер).
Но это не наш метод, консолька - наше всё (c) :)
____________________________

Хакер:
Варианты решения проблемы:
Запустить midl /help
Прочитать MIDL Command-Line Reference

Спасибо за "содержательный" ответ.
Встроенный хелп по параметрам изучил еще раньше. Перебрал разные ключи, но ничего.
Разве так трудно объяснить по-человечески то, что Вы знаете возможно лучше чем кто-либо другой на форуме?
Просто, привести ком. строку для компиляции подобных листингов и указать что ещё нужно для компиляции?
ACF ? (midl -acf my_acf.acf filename.idl)
Думаю немного осталось поковырять. DLL ведь обязательно должна существовать и иметь в себе описанную функцию?

CreateObject создаёт объект указанного класса. Причём тут модуль, о котором идёт речь?
Это всё равно, что спрашивать «можно ли посмотреть порнофиьм в детской библиотеке». Нельзя н только потому, что в детском учреждении не может быть порно, но и потому что книги и фильмы — разные вещи.

Ясно, т.е. без com'а никак.
Если бы я понял как компилировать отдельные tlb то не потерял бы так много времени на ненужные поиски и потуги...
А был бы рабочий и описанный пример, то сейчас бы изучал тонкости синтаксиса и приступал бы к реализации задуманного.
Или будет лучше перенести разговор и в приват?
Mea culpa

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

Re: Написание IDL под TLB

Сообщение Хакер » 04.02.2012 (Сб) 15:51

kiber_punk писал(а):Разве так трудно объяснить по-человечески то, что Вы знаете возможно лучше чем кто-либо другой на форуме?
Просто, привести ком. строку для компиляции подобных листингов и указать что ещё нужно для компиляции?

Не мой метод. Другие дают нищему и голодному приют и пищу. Я даю ему работу.

К тому же, если писать о конкретных ключах, то можно ошибиться, а если пальцем указать на /help, то ошибиться крайне сложно.

kiber_punk писал(а):ACF ? (midl -acf my_acf.acf filename.idl)

Ой.
midl dcsapi.odl /win32 /tlb ..\..\..\tlb\dcsapi.tlb

kiber_punk писал(а):DLL ведь обязательно должна существовать и иметь в себе описанную функцию?

Нет, на всём этапе никого не волнует, существует ли DLL и экспортируется ли ею функция.

kiber_punk писал(а):Ясно, т.е. без com'а никак.

Наоборот, к COM-у всё это (модули с функциями) имеет практически никакое отношение.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Написание IDL под TLB

Сообщение Antonariy » 04.02.2012 (Сб) 15:52

Я что-то делал в этом направлении, вот исходник.
Лучший способ понять что-то самому — объяснить это другому.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Написание IDL под TLB

Сообщение ger_kar » 04.02.2012 (Сб) 22:43

kiber_punk писал(а):Вообщето они создаются автоматически. И внедряются непосредственно в ресурсы (в VB наприер).Но это не наш метод, консолька - наше всё (c)
Если бы они создавались автоматически, то и проблем бы не было, да они конечно создаются при компиляции ActiveX, но всего лишь частный случай. А если надо подправить существующую TLB? А если надо отдельную TLB, а не в ресурсах Dll? А если надо создать TLB для WinApi объявлений? Где тут автоматика? То-то же. Поэтому консолька это скорее неизбежность, так как нормальный удобный инструмент и универсальный инструмент отсутствует напрочь. Спасибо Antonariy и таким как он, которые хоть как-то пытаются эту проблему решить, но в идеале хотелось бы иметь инструмент типа такого:
Выбрал тип проекта в VB TypeLibrary (подобно StandartExe), написал синтаксисом VB объявления в модуле, геть и легким движением руки, получил, чего тебе надо. Ну или как вариант расширить возможности Object Browser или того же OleView настолько, что-бы можно было удобно править и творить, без всяких дополнительных средств.
Вот тогда можно говорить об автоматизации и о том, что не консолькой единой жив программист ;)
Бороться и искать, найти и перепрятать

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

Re: Написание IDL под TLB

Сообщение Хакер » 04.02.2012 (Сб) 22:53

ger_kar писал(а):Выбрал тип проекта в VB TypeLibrary (подобно StandartExe), написал синтаксисом VB объявления в модуле, геть и легким движением руки, получил, чего тебе надо.

А как же описать всё то, что неописываемо бейсиком?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Написание IDL под TLB

Сообщение Antonariy » 05.02.2012 (Вс) 9:23

Я думаю, что все инструменты, позволяющие не пользоваться консолькой, есть в IDE C++ 6.0. MIDL и синтаксически похож и поставлялся как дополнительный инструмент к С++. А VB позиционировался как RAD-инструмент, все необходимое tlb-строение в нем автоматизировано в компиляторе и сокрыто от разработчика.
Лучший способ понять что-то самому — объяснить это другому.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Написание IDL под TLB

Сообщение ger_kar » 05.02.2012 (Вс) 17:51

Хакер писал(а):А как же описать всё то, что неописываемо бейсиком?
Да и на бейсике все можно прекрасно описать, если бы был соответствующий инструмент, поди и в синтаксис бы добавились некоторые недостающие элементы и этих недостающих элементов всего-то ничего. И все можно было бы описывать бейсикоподобным синтаксисом. Конечно все это как говориться на вкус и цвет... Вот мне например Си подобный синтаксис категорически не нравится, хотя я потихоньку и привыкаю, но бейскоподобный синтаксис душе намного милее, может мне поэтому и Power Basic сразу пришелся по душе.
Antonariy писал(а):А VB позиционировался как RAD-инструмент, все необходимое tlb-строение в нем автоматизировано в компиляторе и сокрыто от разработчика.
Ну так то оно так, но хотелось бы, что бы было совсем не так. Но несбыточное хотение это по сути мечтание вслух ;)
Бороться и искать, найти и перепрятать

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

Re: Написание IDL под TLB

Сообщение Хакер » 05.02.2012 (Вс) 22:29

Antonariy писал(а):Я думаю, что все инструменты, позволяющие не пользоваться консолькой, есть в IDE C++ 6.0

Нифига. В IDE C++ 6.0 своего нет вообще ничего, она для всех задач вызывает сторонние консольные приложения (которые с одной стороны распространяются вместе с ней самой, но с другой стороны не являются частью ею, а являются сторонними и бесплатными).
MIDL для генерации TLB, RC для генерации ресурсов, LINK для слинковывания EXE.

Antonariy писал(а):MIDL и синтаксически похож и поставлялся как дополнительный инструмент к С++.

Синтаксически он не ближе к C++, чем к Си без плюсов. И распространяется он так же с бесплатной Platform SDK.

ger_kar писал(а):Да и на бейсике все можно прекрасно описать, если бы был соответствующий инструмент, поди и в синтаксис бы добавились некоторые недостающие элементы и этих недостающих элементов всего-то ничего.

Я говорю «нельзя», а он говорит «можно». Наверное я ошибаюсь, а ты прав.
Тогда расскажи мне, как описать бейсиком вот это:
Код: Выделить всё
[uuid(706FCBC2-1295-46b0-9FB9-0A0C1D9A9378)]
library xtest
{
   [dllname("sa.dll")]
   module xmod
   {

      [entry(2)] const int * volatile * const ** _fastcall xtest();
      [entry(3)] struct {union {const int a; volatile long b;} u; const void * b;} pascal joker();
   }
}


И какие недостающие элементы (которых всего ничего) нужно добавить?

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

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Написание IDL под TLB

Сообщение ger_kar » 06.02.2012 (Пн) 7:25

Хакер писал(а):Тогда расскажи мне, как описать бейсиком вот это:
Хорошо, не просто расскажу, а напишу тоже самое используя синтаксис PowerBasic. Но это вечером, ибо сейчас мне уже пора идти. А что касается недостающих элементов, то это применительно к данному примеру это будут uuid или guid как в PB, _fastcall, Union, ну и указатели конечно. В PB все это добро имеется, могли бы и в VB добавить.
Бороться и искать, найти и перепрятать

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

Re: Написание IDL под TLB

Сообщение Хакер » 06.02.2012 (Пн) 8:04

Я даже слышать ничего не хочу о PB.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Написание IDL под TLB

Сообщение Antonariy » 06.02.2012 (Пн) 9:04

Хакер писал(а):
Antonariy писал(а):Я думаю, что все инструменты, позволяющие не пользоваться консолькой, есть в IDE C++ 6.0

Нифига. В IDE C++ 6.0 своего нет вообще ничего, она для всех задач вызывает сторонние консольные приложения
Вот именно, что вызывает она, а не лично ты, втаптывая команды в шелл.

Хакер писал(а):Тогда расскажи мне, как описать бейсиком вот это:
Код: Выделить всё
[uuid(706FCBC2-1295-46b0-9FB9-0A0C1D9A9378)]
library xtest
{
   [dllname("sa.dll")]
   module xmod
   {

      [entry(2)] const int * volatile * const ** _fastcall xtest();
      [entry(3)] struct {union {const int a; volatile long b;} u; const void * b;} pascal joker();
   }
}
Это бейсиком вообще поддерживается? Unsupported variable type не вылезет? Если вылезет, то нафига иметь ввиду такие конструкции? Достаточно ограничиться тем, что можно нагенерить из обычного исходника. То есть тем, что я уже понаписал в своем аддоне.
Лучший способ понять что-то самому — объяснить это другому.

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

Re: Написание IDL под TLB

Сообщение Хакер » 06.02.2012 (Пн) 9:08

Antonariy писал(а):Если вылезет, то нафига иметь ввиду такие конструкции?

Потому что есть «все варианты», а есть «варианты Automation-совместимого». Второе — маленькое подмножество.
Не вижу причин принижать IDL и заявлять, «нафиг он нужен, когда можно сделать так, чтобы всё можно было описать на VB».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Написание IDL под TLB

Сообщение ger_kar » 06.02.2012 (Пн) 11:13

Хакер писал(а):Я даже слышать ничего не хочу о PB.
Да речь то собственно не о PB, а просто о примере как это можно описать VB подобным синтаксисом. Да то, что ты написал как пример, в нынешней реализации VB невозможно. Но речь вообще не об этом. Я бы сказал так IDL использует Си подобный синтаксис, но никто не мешает изобрести аналогичный язык с бейсокоподобным синтаксисом и назвать его скажем IDLB. И даже не обязательно, что-бы он поддерживал все возможности IDL и являлся его бейсикоподобным клоном. Достаточно, что-бы в его реализацию входила поддержка всех тех возможностей, которые есть в VB.
Хакер писал(а):Потому что есть «все варианты», а есть «варианты Automation-совместимого». Второе — маленькое подмножество.

Вот для этого маленького подмножества и хотелось бы иметь удобный встроенный инструмент, а для всех вариантов пусть останется IDL, ибо правильно сказано, что нет никаких причин его принижать, а о том, что он нафиг не нужен вообще никто даже речи не ведет, хотя скажу, что не самому IDL как языку описания, а инструментам его реализующим не помешало бы быть гораздо удобнее. Взять тот же OleView, почему бы ему не стать более функциональным и двухнаправленным. А делать замену нынешнему IDL меняя его на бейсокоподобный было бы верхом глупости.
А то что касается VB, то почему бы VB программистам не иметь под рукой удобным инструмент для удобной работы с TLB используя тот же синтаксис языка, на котором они программируют и который бы реализовывал создание/изменение TLB в пределах самих возможностей предоставляемых VB. Те же Declare объявления, можно было бы без лишних напряг и телодвижений упаковывать в ТЛБшки. Почему бы и нет?
Бороться и искать, найти и перепрятать

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Написание IDL под TLB

Сообщение Antonariy » 06.02.2012 (Пн) 11:41

Хакер писал(а):
Antonariy писал(а):Если вылезет, то нафига иметь ввиду такие конструкции?

Потому что есть «все варианты», а есть «варианты Automation-совместимого». Второе — маленькое подмножество.
Мы тут рассматриваем idl в контексте VB или вообще?
Зачем иметь ввиду «все те варианты», которые заданный контекст по определению не поддерживает?
Хакер писал(а):Не вижу причин принижать IDL и заявлять, «нафиг он нужен, когда можно сделать так, чтобы всё можно было описать на VB».

Не вижу, где ты увидел принижение и заявление в указанной тобой форме. Я лишь говорил, что в полном объеме его возможности в VB неприменимы, поэтому не стоит о них плакать и пихать их туда, где они не нужны.
Лучший способ понять что-то самому — объяснить это другому.


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

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

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

    TopList