Страница: 1 |
Страница: 1 |
Вопрос: TLB
Добавлено: 03.04.10 22:11
Автор вопроса: Winand | Web-сайт:
Правда, что tlb компилируются в исполняемый файл и их не нужно таскать и регистрировать? Случайно наткнулся)
'* ------------
'* Note: TLBs are compiled to your program so you don't need to distribute the files
'* - OleGuids3.tlb = Ole Guid and interface definitions 3.0
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Филюс
ICQ: 7116156
Вопросов: 3
Ответов: 14
Web-сайт:
Профиль | | #1
Добавлено: 19.06.10 18:36
TLB - это уже скомпилированные объявления. Если программа вызывает функцию из TLB, то вызов идёт почти напрямую (через импорт), а вызов же через Declare - динамический, т.е. перед вызовом по имени библиотеки с функцией проверяется загружена ли она (через GetModuleHandle), если нет, то происходит её загрузка (через LoadLibrary), а потом по имени функции ищется её адрес (через GetProcAddress) и только потом происходит её вызов. Вывод такой: через TLB функции вызываются намного быстрее. И ещё плюсы TLB: увеличивается скорость вызова за счёт того, что строки не конвертируются из Unicode в Ansi, а потом обратно, можно использовать различные трюки с указателями, свойства Set и Get (как в функции mid, которую можно присваивать). При этом из TLB извлекаются только нужные определения, т.е. ненужные определения не влияют на размер файла.
Номер ответа: 2
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #2
Добавлено: 21.06.10 10:00
Правда, и странно это не знать. Хотя есть исключения.
Добавлю также, что TLB - единственный безопасный способ вызова АПИ в многопоточной среде VB6 - до тех пор пока в потоке не инициализирован COM (а, соответственно, и TLS).
Номер ответа: 3
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #3
Добавлено: 21.06.10 13:22
LamerOnLine, тут ты жутко не прав, как и многие. Как раз после правильной инициализации COM и OLE в потоке, он может адекватно вызывать API-функции.Вспоминаем мой пример организации многопоточности в standard exe
Номер ответа: 4
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #4
Добавлено: 23.06.10 17:12
Exec, ну читай же ты внимательнее. Русским по белому же написано - до тех пор пока в потоке не инициализирован COM (а, соответственно, и TLS)
Пока не инициализирован OLE - вызов АПИ через Declare - гарантированный GPF по возврату. С TLB такой проблемы нет. Уж поверь, примеры по многопоточности мне не нужны