Ну объясните мне наконец....

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Ну объясните мне наконец....

Сообщение SLIM » 01.07.2008 (Вт) 19:54

Дня три ползал по нету в поисках внятной информации. Информации по поводу TLB. Что это такое вообще. Зачем оно нужно (я понял что заменяет декларирование DLL функций). Как это использовать. Какая выгода и т.д. Может кто-нидь на статью направит. Просто хотелось бы в подробностях и для новичка.
Пишите жизнь на чистовик.....переписать не удастся.....

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 01.07.2008 (Вт) 21:12

http://msdn.microsoft.com/en-us/library/aa367061(VS.85).aspx
Уж не знаю, на сколько это "для новичка", но все в подробностях.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 01.07.2008 (Вт) 21:36

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

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Сообщение pronto » 02.07.2008 (Ср) 5:59

Через Project > References > кнопкой Browse… добавляешь к проекту. Таким образом, многие функции и константы Win32 API стали частью языка и их нет необходимости объявлять! Потом открываешь Object Browser (F2) и выбираешь из списка с библиотеками пункт Win32 для детального ознакомления. Выгода, по идее, должна быть в скорости вызова используемых функций. Тут есть маленький нюанс, если программа будет распространяться с исходными кодами, то придется таскать файл *.tlb.

P.S. Прилагаю сам файл и программку для регистрации (снятия регистрации) библиотек.
Вложения
WIN32.tlb.rar
(180.66 Кб) Скачиваний: 118
Register_TypeLib_Source_Code.zip
(61.12 Кб) Скачиваний: 120
O, sancta simplicitas!

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 02.07.2008 (Ср) 10:50

pronto
Клевая библиотечка! Теперь ничего не надо декларировать! Только она 98 года... Нет ссылки на сайт автора?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Сообщение pronto » 02.07.2008 (Ср) 10:58

Я уже и не помню откуда она у меня. Гуглом находил тогда, значит можно и сейчас!
O, sancta simplicitas!

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

Сообщение Antonariy » 02.07.2008 (Ср) 12:18

Гугла тогда не было :)
Лучший способ понять что-то самому — объяснить это другому.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 02.07.2008 (Ср) 12:43

Всетаки обновилась: version 0.5 (52KB; last update: November 13, 2001)
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Сообщение pronto » 02.07.2008 (Ср) 13:21

Денис, а чем версия от 2001 лучше версии от 1998?

Гугла тогда не было


Antonariy, с чего ты взял, что это было именно в 98? Я активно использую интернет с 2005 года и в слово "тогда" вкладываю сроки не ранее этой даты. Уж тогда-то Гуугл был!

для справки.
http://www.google.com/intl/ru/corporate/history.html
Последний раз редактировалось pronto 02.07.2008 (Ср) 13:58, всего редактировалось 1 раз.
O, sancta simplicitas!

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

Сообщение Antonariy » 02.07.2008 (Ср) 13:31

Когда в одной реплике есть привязка к дате, а в следующей отсылка "тогда", логично предположить, что речь идет об одной и той же дате.

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

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Сообщение pronto » 02.07.2008 (Ср) 14:03

Ну, в общем, мы поняли друг друга :)
O, sancta simplicitas!

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 02.07.2008 (Ср) 15:03

pronto
А вот буквально по названию библиотеки делаешь поиск и находишь где-то здесь топик примерно прошлого года давности, где чел жалуется на ошибку при объявлении какой-то переменной. Там обсуждали что-то про траблы с указателями и пр. Я ради интереса посмотрел - в новой версии баг исправлен.
Кроме того библа "полегчала" раз в пять (после беглого осмотра по F2 у меня возникло предположение, что оттуда убраны декларации, явно устаревшие, ну, например, юзавшиеся только в win 95).
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 02.07.2008 (Ср) 20:30

P.S. Прилагаю сам файл и программку для регистрации (снятия регистрации) библиотек.

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

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Сообщение pronto » 03.07.2008 (Чт) 4:23

Конкретно эту библу можно не регистрировать и использовать из любого места. Вот когда захочется ее перенести в другую папку, то сначала нужно снять регистрацию, а потом зарегистрировать на новом месте.
Использование программки VBRegTLB.exe заключаеся в двух ее кнопках - Register и Unregister. Прежде всего нужно указать путь к библиотеке над которой совершается действие.
Чаще всего в регистрации нуждаются ActiveX DLL, но про это рекомендую почитать самостоятельно.
O, sancta simplicitas!

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 03.07.2008 (Чт) 7:28

Существует REGTLIB.EXE, которая регистрирует TLB. Находится в системной директории. Раньше могла и дерегистрировать, сейчас, вроде, только регистрирует. Не знаю почему.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 03.07.2008 (Чт) 21:13

А возможно создание других tlb?
Пишите жизнь на чистовик.....переписать не удастся.....

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

Сообщение Хакер » 03.07.2008 (Чт) 22:52

Разумеется.

Существует ряд системных (олешных) средств (CreateTypeLib и сопутствующие интерфейсы (ICreateTypeLib, ICreateTypeInfo)).

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

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 04.07.2008 (Пт) 22:41

Существует так-же обёртка над этими средствами (компилятор MIDL), на котором можно писать тблшки.

Что значит писать? Они пишутся отдельно на каком-то языке (на каком?). И в каком смысле обертка? т.е. то что собственно превращает написанный tlb (с помощью олешных интерфейсов) в рабочий, который можно использовать? Тогда важно понять суть и строение dll. Как работает dll (как происходит реализация их функций. Просто я слышал что можно вызвать dll функцию через пуск--->Выполнить). Соответственно потом понять суть, строение и работу tlb. Может кто-нибудь вкратце и доступно рассказать?
Пишите жизнь на чистовик.....переписать не удастся.....

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

Сообщение Хакер » 05.07.2008 (Сб) 11:28

Что значит писать? Они пишутся отдельно на каком-то языке (на каком?).

То и значит. Да. IDL. Имеет си-подобный синтаксис.

И в каком смысле обертка?

В том смысле, что для создания TLB есть спеицальные API-функции. Компилятор MIDL не сам компилирует TLB, а просто вызывает эти API-функции.

Тогда важно понять суть и строение dll.

Суть и строение dll понять конечно важно, но понимание сути и строения dll никак не связано с tlb. TLB вообще никак жестко не сопряжены с DLL.

Как работает dll (как происходит реализация их функций.

dll работает так же, как и exe. С единственной разницей, что dll подгружается в АП уже существующего процесса, и имеет внутри себя информацию где какая функция расположена (не путать эту информацию с TLB).

Что понимать под "реализацией функций" в данном контекте - не знаю.

Просто я слышал что можно вызвать dll функцию через пуск--->Выполнить).

Да, но это, опять же, никаким боком не связано с TLB. Это даже никакая не особеность dll. Просто есть утилита rundll32, которая принимает (через командную строку) что надо вызвать, и вызывает это (что вполне естественно). Причём, это даже не чудесность rundll. Такую утилиту можно легко написать самому.

Т.е. возможность вызвать функцию через Пуск->Выполнить обусловлена лишь наличиаем обёртки. То что это можно делать изначально (без лишних телодвижений) обусловлено лишь тем, что такая утилита встроена в винду.


Соответственно потом понять суть, строение и работу tlb.

Строение TLB ты вдряд ли поймёшь -- оно нигде не документировано (насколько я помню).
Работу TLB понять невозможно. TLB не работают.

Если DLL -- это стиральная машина, то TLB -- инструкция к этой машине. Бумажка, в которой написано, какие кнопки есть на лицевой панели стиральной машины, и краткое описание каждой.

Понять, как работает стиральная машина -- можно.
Понять, как работает инструкция -- невозможно (она и не работает вовсе).

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

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 05.07.2008 (Сб) 21:25

В том смысле, что для создания TLB есть спеицальные API-функции. Компилятор MIDL не сам компилирует TLB, а просто вызывает эти API-функции.

Во закрутили. Для создания TLB для DLL, в котором используются API функции вызывается API функция.

Суть и строение dll понять конечно важно, но понимание сути и строения dll никак не связано с tlb. TLB вообще никак жестко не сопряжены с DLL.

Развен не сопряжены. Как я понял - TLB - это инструкция к DLL, т.е. что и как использовать. Соответственно TLB не сможет пользоваться иным DLL, отличным от того, к которому он создан. Не возможно использовать инструкцию к стиральной машинке в области компьютера.

dll работает так же, как и exe. С единственной разницей, что dll подгружается в АП уже существующего процесса, и имеет внутри себя информацию где какая функция расположена (не путать эту информацию с TLB).

Чем больше ответов тем больше вопросов. Значит для понимания работы DLL важно понять работу exe.....

Строение TLB ты вдряд ли поймёшь -- оно нигде не документировано (насколько я помню).

Замечательно.....кроме того что это инструкция к dll ничего не известно....
Пишите жизнь на чистовик.....переписать не удастся.....

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

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

Во закрутили. Для создания TLB для DLL, в котором используются API функции вызывается API функция.

Так уж устроен мир (точнее Windows), что для всего нужно вызывать API-функции.

Развен не сопряжены. Как я понял - TLB - это инструкция к DLL, т.е. что и как использовать. Соответственно TLB не сможет пользоваться иным DLL, отличным от того, к которому он создан. Не возможно использовать инструкцию к стиральной машинке в области компьютера.

TLB -- это TypeLibrary. Это библиотека, в которой описаны типы. Под типами здесь следует понимать классы, энумы и модули. В классах, модулях и энумах описываются члены. Так уж случилось, что в COM ничего не продумали для модулей, и поэтому функции из модулей соответствуют обычным экспортируемым функциям каких-нибудь библиотек. Например нескольких.

Так что может быть одна TLB в которой описаны 9000 функций к 70 библиотекам. (Яркий пример TLB для нескольких библиотек -- win32.tlb).

Чем больше ответов тем больше вопросов. Значит для понимания работы DLL важно понять работу exe.....

Значит, надо понять, как рботает компьютер. Надо было понять, прежде чем браться за программирование. К сожалению, никто не идёт этим правильным путем.


кроме того что это инструкция к dll ничего не известно....

TLB -- это библиотека типов. Всё. От этого и отталкивайся.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 06.07.2008 (Вс) 21:25

Значит, надо понять, как рботает компьютер. Надо было понять, прежде чем браться за программирование. К сожалению, никто не идёт этим правильным путем.

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

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

Сообщение Хакер » 06.07.2008 (Вс) 21:26

Сам я тоже начинал не так как надо.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 07.07.2008 (Пн) 19:22

Сам я тоже начинал не так как надо.

Да и мало кто вообще так начинал.....мне кажется
Пишите жизнь на чистовик.....переписать не удастся.....

Zenitchik
Постоялец
Постоялец
 
Сообщения: 369
Зарегистрирован: 21.12.2006 (Чт) 14:48

Сообщение Zenitchik » 07.07.2008 (Пн) 19:32

Я считаю, что так начинать не надо. В конце концов, компьютер - не цель а средство. Да и программа тоже пишется для того, чтобы ей пользоваться. А посему, изучать каждый аспект прогарммирования нужно по мере необходимости - иначе мы только зря потеряем время.
Знание английского языка - затрудняет понимание кода

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 07.07.2008 (Пн) 20:09

Думаю ты прав. Все познается постепенно само собой. Иначе так и останемся на уровне программ Hello!!!
Пишите жизнь на чистовик.....переписать не удастся.....

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Сообщение Александр Дмитриев » 08.07.2008 (Вт) 1:00

Хакер писал(а):Если DLL -- это стиральная машина, то TLB -- инструкция к этой машине.
Можно сказать лучше: "Если объект COM -- это стиральная машина, то TLB -- инструкция к этой машине (или к нескольким машинам)". А объект COM уже может содержаться и в EXE, и в DLL, и в OCX. Мой вопрос: в TLB хранится, в частности, информация о методах классов; в этой информации присутствует информация о том, где реализованы эти методы (то есть, например, что-то типа такого: этот метод реализуется в таком-то файле с таким-то смещением внутри него), или TLB не привязана к реализации того, что в ней описано? И если присутствует, то как её обозначить при написании исходного кода на IDL?

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

Сообщение Хакер » 10.07.2008 (Чт) 0:08

в этой информации присутствует информация о том, где реализованы эти методы (то есть, например, что-то типа такого: этот метод реализуется в таком-то файле с таким-то смещением внутри него),

Нет такого.

Файлы связаны с классами через CLSID-ы в реестре. Смещения методов не хрвнятся в TLB, они хранятся в vtable-ах интерфейсов, которые создаются конструкторами классов. В TLB однако же хранится соответствие метода и его номера в vtbl.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot и гости: 10

    TopList