TLBuilder

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

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

TLBuilder

Сообщение Antonariy » 21.10.2008 (Вт) 14:29

Это небольшой Addin для VB6, который позволяет создавать и использовать библиотеки типов (*.tlb) не отходя от станка.
Для его работы (точнее компилирования tlb) необходима установка компонент VC++ — MFC and Template Libraries (возможно не полностью, там 140 мегов, не в курсе что нужно, а что нет) и Build Tools (midl отдельно не ставится), переменных среды (инсталлятор студии сам предложит их прописать, нужно согласиться). Ну и конечно знание IDL.

Подключение tlb к vb-проекту происходит автоматически после компиляции.
Возможно создание только одного tlb на проект — объектная модель vb не показывает свойств компонентов из группы Related Documents (туда цепляется исходник), поэтому имя idl и tlb жестко связано с именем проекта.

Можно расширить функционал генератором idl-кода на основе vb-кода, но пока лениво.

Исходники прилагаются.
У вас нет доступа для просмотра вложений в этом сообщении.
Последний раз редактировалось Antonariy 30.10.2008 (Чт) 13:02, всего редактировалось 2 раз(а).
Лучший способ понять что-то самому — объяснить это другому.

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

Re: TLBuilder

Сообщение Antonariy » 29.10.2008 (Ср) 16:00

Лень с ленью схлестнулась и лень победила. В выйгрыше, как всегда, прогресс.

Переводить 4000 строк дефиниций в idl ручками оказалось едва ли не дольше и однозначно муторнее, чем написать генератор. Кстати совсем недавно кто-то кого-то умолял дать ему генератор idl, а у того не оказалось. Вот парень рад будет…
До кучи добавлен поиск с заменой.

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

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

Re: TLBuilder

Сообщение Antonariy » 30.10.2008 (Чт) 13:05

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

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

Re: TLBuilder

Сообщение Antonariy » 30.10.2008 (Чт) 15:09

Обнаружены дополнительные баги и глюки, которые будут исправлены после этого:
Код: Выделить всё
[
    uuid(242F2AA5-A33A-4D07-9107-6AF70B3CB234),
    helpstring("test Type library (Created with TLBuilder v. 1.0)"),
    version(1.0)
]
library testLib {
    importlib("stdole2.tlb");

    [helpstring("Parsing")]
    module Parsing{
        typedef struct FakeEntry {
            char Length;
            BSTR Fake;
        } FakeEntry;

        typedef struct ReplEntry {
            char Symb;
            char Count;
19:         SAFEARRAY(FakeEntry) Fakes;
        } ReplEntry;

        typedef struct ReplTables {
            SAFEARRAY(ReplEntry) Table;
            long TableID;
        } ReplTables;


    }
}

Microsoft (R) MIDL Compiler Version 5.01.0164
Copyright (c) Microsoft Corp 1991-1997. All rights reserved.
Processing F:\Projects\test\test.idl
test.idl
Processing C:\PROGRA~1\MICROS~3\VC98\INCLUDE\oaidl.idl
oaidl.idl
Processing C:\PROGRA~1\MICROS~3\VC98\INCLUDE\objidl.idl
objidl.idl
Processing C:\PROGRA~1\MICROS~3\VC98\INCLUDE\unknwn.idl
unknwn.idl
Processing C:\PROGRA~1\MICROS~3\VC98\INCLUDE\wtypes.idl
wtypes.idl
F:\Projects\test\test.idl(19) : error MIDL2025 : syntax error: expecting a type specification near "FakeEntry"
F:\Projects\test\test.idl(20) : error MIDL2026 : cannot recover from earlier syntax errors; aborting compilation

Почему?
Лучший способ понять что-то самому — объяснить это другому.

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: TLBuilder

Сообщение Debugger » 30.10.2008 (Чт) 16:21

Вообще-то это к тебе вопрос :D
То, что установка требует VC++ - противненько. У меня стоит Microsoft Visual C++ 2008 Express Edition (о как!), но все равно не идет. Ругается на библиотеку Microsoft ActiveX Data Objects (на TBSTYLE_BUTTON).
А мне почему-то всегда казалось, что VB генерирует tbl сам и втыкает его в ресурсы готового файла.
Программист - это локальный бог (С) Я

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

Re: TLBuilder

Сообщение Antonariy » 30.10.2008 (Чт) 17:59

Ругается на библиотеку Microsoft ActiveX Data Objects (на TBSTYLE_BUTTON).

Пардон, забыл tlb прицепить.

То, что установка требует VC++ - противненько.
Притензии не ко мне. :) Для компиляции tlb требуются библиотеки, в которых описаны стандартные типы и интерфейсы, например IDispatch. Ну и midl.exe, естественно. Если все это есть и в VC2008, не вижу причин, почему бы не прикрутить к ней.
У вас нет доступа для просмотра вложений в этом сообщении.
Лучший способ понять что-то самому — объяснить это другому.

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

Re: TLBuilder

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

(Не качал)

А зачем ты переводишь что-то в idl? Зачем использовать midl для создания tlb-шек?
—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: TLBuilder

Сообщение Antonariy » 30.10.2008 (Чт) 22:07

Не понял. Ты о смысле этого действа или об использовании именно midl'а?
Лучший способ понять что-то самому — объяснить это другому.

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

Re: TLBuilder

Сообщение Хакер » 31.10.2008 (Пт) 8:33

Я о том, зачем для создания TLB (конкретно файла с расширением tlb, со своим tlb-шным форматом) использовать посредника(midl)?

Почему бы сразу не создавать TLB файл самому? Это и быстрее, и midl (со всеми прибамбасами) не нужен, и IDL-код генерировать не надо.
—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: TLBuilder

Сообщение Antonariy » 31.10.2008 (Пт) 9:57

Я не знаю другого способа.
А ты не знаешь, почему midl выдает вышеуказанную ошибку?
Лучший способ понять что-то самому — объяснить это другому.

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

Re: TLBuilder

Сообщение Хакер » 31.10.2008 (Пт) 10:05

Я не знаю другого способа.


midl — всего лишь обертка над стандартными интерфейсами объектов oleaut32.dll. Т.е. любая машина, на которой есть эта библиотека, уже в состоянии создавать TLB-шки .

Есть функция CreateTypeLib(2), возвращающая объект ICreateTypeLib. Через него, собственно, и создаёшь библиотеку, а затем вызываешь метод SaveAllChanges.
—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: TLBuilder

Сообщение Antonariy » 31.10.2008 (Пт) 10:45

А из чего она создает tlb?
Лучший способ понять что-то самому — объяснить это другому.

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

Re: TLBuilder

Сообщение Хакер » 31.10.2008 (Пт) 11:11

Что значит из чего?

Надо тебе, скажем, добавить в библиотеку описание интерфейса. Ты вызываешь у объекта ICreateTypeLib метод CreateTypeInfo с нужными параметрами — получаешь объект, который поддерживает интерфейс ICreateTypeInfo. А этого объекта вызываешь методы ICreateTypeInfo::AddFuncDesc, ICreateTypeInfo::AddVarDesc и т.п. чтобы добавлять члены.
—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: TLBuilder

Сообщение Antonariy » 31.10.2008 (Пт) 11:49

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: TLBuilder

Сообщение tyomitch » 31.10.2008 (Пт) 14:56

А ещё есть mktyplib, который как midl, только ни от чего не зависит, и генерит менее глючные TLB.
Мэтт Курланд, один из разработчиков VB, советует использовать именно его для генерации TLB.
Изображение

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

Re: TLBuilder

Сообщение Antonariy » 31.10.2008 (Пт) 15:56

Хм, принцип его работы отличается от midl. Он не хочет, например, компилировать модули без указания dllname. А если избавиться от модулей, то на текст
Код: Выделить всё
[
    uuid(44A03881-FB6C-4E5D-BB0F-E85AA13FFF13),
    helpstring("DocView Type library (Created with TLBuilder v. 1.0)"),
    version(1.0)
]
library DocViewLib {
    importlib("stdole2.tlb");

        const long ACTIVEOBJECT_STRONG = 0;
}
ругается словами
Microsoft (R) Type Library Generator Version 2.20.4230
Copyright (c) Microsoft Corp. 1993-1995. All rights reserved.

F:\Gisoft\docBrowser\DocViewLib.idl (9) : fatal error M0001: Syntax error near line 9 column 9: expected: keyword

Что ему тут не нравится?
Лучший способ понять что-то самому — объяснить это другому.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: TLBuilder

Сообщение tyomitch » 31.10.2008 (Пт) 16:02

Константа должна быть в модуле.
Dllname у модуля можешь поставить любой, хоть просто точку.
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 2982
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Москва

Re: TLBuilder

Сообщение jangle » 14.04.2009 (Вт) 9:39

tyomitch писал(а):А ещё есть mktyplib, который как midl, только ни от чего не зависит, и генерит менее глючные TLB.
Мэтт Курланд, один из разработчиков VB, советует использовать именно его для генерации TLB.


Откуда можно скачать этот mktyplib?

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: TLBuilder

Сообщение karlex » 14.04.2009 (Вт) 10:03

Я нашел его здесь: ...\Microsoft Visual Studio\VC98\Bin\
Т.е., судя по всему, он есть в комплекте с MS VC++ 6
Если это действительно он...
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 2982
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Москва

Re: TLBuilder

Сообщение jangle » 14.04.2009 (Вт) 12:00

karlex писал(а):Я нашел его здесь: ...\Microsoft Visual Studio\VC98\Bin\
Т.е., судя по всему, он есть в комплекте с MS VC++ 6
Если это действительно он...


Спасибо, а можешь посмотреть где лежат файлы:

oaidl.idl
objidl.idl
unknwn.idl
wtypes.idl

И выложить их в форум?

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: TLBuilder

Сообщение karlex » 14.04.2009 (Вт) 13:06

...\Microsoft Visual Studio\VC98\Include
У вас нет доступа для просмотра вложений в этом сообщении.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 2982
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Москва

Re: TLBuilder

Сообщение jangle » 14.04.2009 (Вт) 15:42

спасибо, но все равно не заработало, видимо надо ставить VC :evil:

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

Re: TLBuilder

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

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

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

Re: TLBuilder

Сообщение arthur2 » 11.03.2012 (Вс) 22:30

Всё здорово! Особенно генерация на основе кода!!! но мидл у меня из-под аддина отказывается компилировать исходник - говорит:
midl : command line error MIDL1001 : cannot open input file oaidl.idl
Приходится компилировать исходник отдельно - если делать это в папке с самим мидлом, то компиляция получается.

В чем может быть косяк?
Артур
 
   

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

Re: TLBuilder

Сообщение Antonariy » 12.03.2012 (Пн) 11:36

Мидлу нужно много дополнительных файлов. Я выцарапал его со всеми зависимостями из папки установки, и получился такой набор:
Код: Выделить всё
MSXML.IDL
OAIDL.IDL
OBJIDL.IDL
OLEIDL.IDL
SERVPROV.IDL
UNKNWN.IDL
URLMON.IDL
WTYPES.IDL
C1.DLL
MSPDB60.DLL
CL.EXE
MIDL.EXE
URLMON и MSXML определенно не являются необходимыми, я компилил какие-то зависимые от них интерфейсы. Где-то там же в папке установки есть папка с коллекцией системных idl, ее я тоже скопировал, чтобы при необходимости по-быстрому переносить из нее необходимые зависимости.
Лучший способ понять что-то самому — объяснить это другому.

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

Re: TLBuilder

Сообщение Хакер » 12.03.2012 (Пн) 12:48

arthu2
Если эта тулза сама использует мидл, толку от неё (тулзы) в рамках этой проблемы никакой не будет. Я думал, что она генерирует напрямую через ICreateTypeLib, и мы таким образом убежим от MIDL-овскго бага.
—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: TLBuilder

Сообщение arthur2 » 12.03.2012 (Пн) 18:08

Хакер, ну ты чего - я ж не тупой :) Понятно, что раз это надстройка над мидлом, то все косяки компилирования мидлом останутся. Другое дело, что тулза действительно удобная :)

Antonariy, проблема в том, что все нужные мидлу файлы лежат с ним в одной папке. И компиляция нормально происходит, если запустить её ручками. А вот из тулзы - почему-то не получается. Может, нужно каким-то образом ещё установить рабочую папку?
Артур
 
   

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

Re: TLBuilder

Сообщение Antonariy » 12.03.2012 (Пн) 19:13

ChDir? Вообще у меня такой проблемы не было.
Была вроде какая-то бодяга с переменными среды, но уже не помню. Почитай msdn, я с его помощью с мидлом боролся.
Лучший способ понять что-то самому — объяснить это другому.

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

Re: TLBuilder

Сообщение arthur2 » 12.03.2012 (Пн) 19:51

Antonariy писал(а):ChDir?
Ну да, мне тоже пришло в голову, сейчас попробовал - заработало :)

Под "как-нибудь" я имею ввиду, можно ли как-то установить рабочую директорию командной строкой? Просто файлы .odl у меня зарегины на mktyplib, и всё по клику компилируется без проблем. Сделал аналогичную запись в реестре для .idl на midl, но получаю ту же самую cannot open input file oaidl.idl
Артур
 
   


Вернуться в Наши проекты

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

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

    TopList