kiber_punk писал(а):Хочу поинтересоваться, как же пишутся tlb,
в частности для WinAPI?
С IDL'ом почти не работал. А ещё и Vtbl нужно организовывать...В общем тёмный лес.
И примеров негде не видно.
Но главный вопрос который меня терзает - можно ли реализовать это через IDispatch и прикрутить идентификаторы (ProgID/CLSID)?
Хакер писал(а):И примеров негде не видно.
Враньё.
Примеров более чем очень много. Даже в моей статье в википедии есть пример. Там же есть и пример объявления
Но главный вопрос который меня терзает - можно ли реализовать это через IDispatch и прикрутить идентификаторы (ProgID/CLSID)?
А вот это конкретная чушь.
kiber_punk писал(а):Инфы совсем немного, а про винапи'шный tlb-хак вообще мало кто знает.
Вчера перерыл много ресурсов в поисках win32.old (осходника win32.tlb) но ничего нет.
Хакер, что нужно чтобы его скомпилировать и какие ключи подставить в midl?
Хорошо, чтобы не понаписать ляпов, переформулирую - можно ли увязать такую tlb с Automation (CreateObject и др.)?
Упомянутые идентификаторы задаются в idl'е, ведь так?
Просветите, если не трудно.
Хакер писал(а):Любая tlb-шка может быть обратно декомпилирована (с учётом потери комментариев) с помощью утилиты OleView из VS6.
ger_kar:
В век визуальных технологий и виртуальной реальности TLB'шки делаются так гемморно используя совсем отсталые технологии .
Хакер:
Варианты решения проблемы:Запустить midl /help
Прочитать MIDL Command-Line Reference
CreateObject создаёт объект указанного класса. Причём тут модуль, о котором идёт речь?
Это всё равно, что спрашивать «можно ли посмотреть порнофиьм в детской библиотеке». Нельзя н только потому, что в детском учреждении не может быть порно, но и потому что книги и фильмы — разные вещи.
kiber_punk писал(а):Разве так трудно объяснить по-человечески то, что Вы знаете возможно лучше чем кто-либо другой на форуме?
Просто, привести ком. строку для компиляции подобных листингов и указать что ещё нужно для компиляции?
kiber_punk писал(а):ACF ? (midl -acf my_acf.acf filename.idl)
kiber_punk писал(а):DLL ведь обязательно должна существовать и иметь в себе описанную функцию?
kiber_punk писал(а):Ясно, т.е. без com'а никак.
Если бы они создавались автоматически, то и проблем бы не было, да они конечно создаются при компиляции ActiveX, но всего лишь частный случай. А если надо подправить существующую TLB? А если надо отдельную TLB, а не в ресурсах Dll? А если надо создать TLB для WinApi объявлений? Где тут автоматика? То-то же. Поэтому консолька это скорее неизбежность, так как нормальный удобный инструмент и универсальный инструмент отсутствует напрочь. Спасибо Antonariy и таким как он, которые хоть как-то пытаются эту проблему решить, но в идеале хотелось бы иметь инструмент типа такого:kiber_punk писал(а):Вообщето они создаются автоматически. И внедряются непосредственно в ресурсы (в VB наприер).Но это не наш метод, консолька - наше всё (c)
ger_kar писал(а):Выбрал тип проекта в VB TypeLibrary (подобно StandartExe), написал синтаксисом VB объявления в модуле, геть и легким движением руки, получил, чего тебе надо.
Да и на бейсике все можно прекрасно описать, если бы был соответствующий инструмент, поди и в синтаксис бы добавились некоторые недостающие элементы и этих недостающих элементов всего-то ничего. И все можно было бы описывать бейсикоподобным синтаксисом. Конечно все это как говориться на вкус и цвет... Вот мне например Си подобный синтаксис категорически не нравится, хотя я потихоньку и привыкаю, но бейскоподобный синтаксис душе намного милее, может мне поэтому и Power Basic сразу пришелся по душе.Хакер писал(а):А как же описать всё то, что неописываемо бейсиком?
Ну так то оно так, но хотелось бы, что бы было совсем не так. Но несбыточное хотение это по сути мечтание вслухAntonariy писал(а):А VB позиционировался как RAD-инструмент, все необходимое tlb-строение в нем автоматизировано в компиляторе и сокрыто от разработчика.
Antonariy писал(а):Я думаю, что все инструменты, позволяющие не пользоваться консолькой, есть в IDE C++ 6.0
Antonariy писал(а):MIDL и синтаксически похож и поставлялся как дополнительный инструмент к С++.
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();
}
}
Хорошо, не просто расскажу, а напишу тоже самое используя синтаксис PowerBasic. Но это вечером, ибо сейчас мне уже пора идти. А что касается недостающих элементов, то это применительно к данному примеру это будут uuid или guid как в PB, _fastcall, Union, ну и указатели конечно. В PB все это добро имеется, могли бы и в VB добавить.Хакер писал(а):Тогда расскажи мне, как описать бейсиком вот это:
Вот именно, что вызывает она, а не лично ты, втаптывая команды в шелл.Хакер писал(а):Antonariy писал(а):Я думаю, что все инструменты, позволяющие не пользоваться консолькой, есть в IDE C++ 6.0
Нифига. В IDE C++ 6.0 своего нет вообще ничего, она для всех задач вызывает сторонние консольные приложения
Это бейсиком вообще поддерживается? Unsupported variable type не вылезет? Если вылезет, то нафига иметь ввиду такие конструкции? Достаточно ограничиться тем, что можно нагенерить из обычного исходника. То есть тем, что я уже понаписал в своем аддоне.Хакер писал(а):Тогда расскажи мне, как описать бейсиком вот это:
- Код: Выделить всё
[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();
}
}
Antonariy писал(а):Если вылезет, то нафига иметь ввиду такие конструкции?
Да речь то собственно не о PB, а просто о примере как это можно описать VB подобным синтаксисом. Да то, что ты написал как пример, в нынешней реализации VB невозможно. Но речь вообще не об этом. Я бы сказал так IDL использует Си подобный синтаксис, но никто не мешает изобрести аналогичный язык с бейсокоподобным синтаксисом и назвать его скажем IDLB. И даже не обязательно, что-бы он поддерживал все возможности IDL и являлся его бейсикоподобным клоном. Достаточно, что-бы в его реализацию входила поддержка всех тех возможностей, которые есть в VB.Хакер писал(а):Я даже слышать ничего не хочу о PB.
Хакер писал(а):Потому что есть «все варианты», а есть «варианты Automation-совместимого». Второе — маленькое подмножество.
Мы тут рассматриваем idl в контексте VB или вообще?Хакер писал(а):Antonariy писал(а):Если вылезет, то нафига иметь ввиду такие конструкции?
Потому что есть «все варианты», а есть «варианты Automation-совместимого». Второе — маленькое подмножество.
Хакер писал(а):Не вижу причин принижать IDL и заявлять, «нафиг он нужен, когда можно сделать так, чтобы всё можно было описать на VB».
Вернуться в OLE / COM / ActiveX
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4