Строковые константы в тлб

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

Строковые константы в тлб

Сообщение arthur2 » 11.03.2012 (Вс) 14:58

Хочу константы из нечитаемых символов. В исходнике тлб пишу:
Код: Выделить всё
            const LPSTR char0 = "\0";
            const LPSTR char1 = "\1";
            const LPSTR char2 = "\2";
            const LPSTR char3 = "\3";

После компиляции тлб и подключения к проекту char0, как и предполагалось, равен vbnullchar, а вот остальные - равны строкам "1", "2" и "3"
С чем косяк?
Артур
 
   

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

Re: Строковые константы в тлб

Сообщение Хакер » 11.03.2012 (Вс) 15:01

А по версии OleView что?
Плюс попробуй \xHH-ноатацию.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Строковые константы в тлб

Сообщение arthur2 » 11.03.2012 (Вс) 15:10

хм... очень странно - олевью вообще мою тлб не открыла: ---------------------------
OLE/COM Object Viewer
---------------------------
IMoniker::BindToObject failed on the file moniker created from ( "C:\tlb\lib.tlb" ).
<No system message defined> MK_E_INVALIDEXTENSION ($800401E6)
---------------------------
ОК
---------------------------

\x1 тоже пробовал - получаю строку "х1"
Артур
 
   

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

Re: Строковые константы в тлб

Сообщение Хакер » 11.03.2012 (Вс) 15:11

arthur2 писал(а):хм... очень странно - олевью вообще мою тлб не открыла: ---------------------------

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

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

Re: Строковые константы в тлб

Сообщение Хакер » 11.03.2012 (Вс) 15:12

arthur2 писал(а):\x1 тоже пробовал - получаю строку "х1"

Потому что должно быть \x01.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Строковые константы в тлб

Сообщение arthur2 » 11.03.2012 (Вс) 15:26

Теперь получаю строку "x01" :(((
Хакер писал(а):Потому что ты и не пытался её открыть, а пытался совершить с ней неладное.
В смысле? Меню File>View TypeLib..., выбираю свою тлб. А как надо?
Артур
 
   

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

Re: Строковые константы в тлб

Сообщение Хакер » 11.03.2012 (Вс) 15:27

arthur2 писал(а):В смысле? Меню File>View TypeLib..., выбираю свою тлб. А как надо?

Нет. Ошибка свидетельствует о том, что ты выбрал не View TypeLib, а первый пункт — Bind To File.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Строковые константы в тлб

Сообщение arthur2 » 11.03.2012 (Вс) 15:31

о боги, вот это я ступил... :oops:

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

Код: Выделить всё
const LPSTR char0 = "\0";
    const LPSTR char1 = "x01";
    const LPSTR char2 = "2";
    const LPSTR char3 = "3";
Артур
 
   

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

Re: Строковые константы в тлб

Сообщение Хакер » 11.03.2012 (Вс) 15:38

Чем компилируешь tlb?
mktyplib? midl?
Версия?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Строковые константы в тлб

Сообщение arthur2 » 11.03.2012 (Вс) 15:40

mktyplib 2.30.4230
Артур
 
   

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

Re: Строковые константы в тлб

Сообщение Хакер » 11.03.2012 (Вс) 15:43

mktyplib давно признан устаревшим. Хотя в нём есть конечно определённые черты, которые заставляют о нём думать лучше, чем о MIDL-е.

Но тем не менее, попробуй MIDL-ом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Строковые константы в тлб

Сообщение arthur2 » 11.03.2012 (Вс) 15:58

Ну в общем. получилось. Правда, другой странный косяк:

До компиляции:
Код: Выделить всё
            const LPSTR char0 = "\0";
            const LPSTR char1 = "\x01";
            const LPSTR char2 = "\2";
            const LPSTR char3 = "\3";

после компиляции
Код: Выделить всё
    const LPSTR char0 = "";
    const LPSTR char1 = "\x01";
    const LPSTR char2 = "\x02";
    const LPSTR char3 = "\x03";
То есть, теперь неправильно скомпилировался char0 - там пустая строка, и бейсик это подтвердил.

А какие черты заставляют думать о мидле хуже? уже не помню, почему. но почему-то я не стал им пользоваться .
Артур
 
   

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

Re: Строковые константы в тлб

Сообщение Хакер » 11.03.2012 (Вс) 16:23

arthur2 писал(а):А какие черты заставляют думать о мидле хуже? уже не помню, почему. но почему-то я не стал им пользоваться .

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

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

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

Re: Строковые константы в тлб

Сообщение arthur2 » 11.03.2012 (Вс) 16:37

Интересно, а почему теперь const LPSTR char0 = "\0"; и const LPSTR char0 = "\x00";правильно не скомпилировались?
Артур
 
   

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

Re: Строковые константы в тлб

Сообщение Хакер » 11.03.2012 (Вс) 16:38

Надо думать, что эти гении где-нибудь внутри применили какую-нибудь функцию, которая 0-символ трактует как символ конца строки.

Попробуй сделать такую константу:
"FOO\0BAR"

Что с ней произойдёт?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Строковые константы в тлб

Сообщение arthur2 » 11.03.2012 (Вс) 16:58

Ага, мидл обрезал по нулю, осталось только FOO
А с mktyplib вообще странно получилось: в бейсике debug.print char3 дает FOO BAR (причем, в строке именно ноль). А олевью, почему-то вообще какую-то хрень показывает: const LPSTR char3 = "FOO\0мІ\0";
Артур
 
   

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

Re: Строковые константы в тлб

Сообщение Хакер » 11.03.2012 (Вс) 17:01

arthur2 писал(а):Ага, мидл обрезал по нулю, осталось только FOO

Ну как и предполагалось. Наверное они применили там strlen или strcpy или что-нибудь такое. Недальновидные идиоты.

arthur2 писал(а): в бейсике debug.print char3 дает FOO BAR (причем, в строке именно ноль).

Вроде всё правильно, да? 0-символ заменяется на пробел в Immediate Pane.

arthur2 писал(а):А олевью, почему-то вообще какую-то хрень показывает: const LPSTR char3 = "FOO\0мІ\0";

А здесь другая команда косоруких поработала. Выделили места сколько нужно, а strcpy скопировала только часть строки, всё остальное — мусор.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Строковые константы в тлб

Сообщение arthur2 » 11.03.2012 (Вс) 17:09

Получается, если хочу в константах нечитаемые символы - компилирую мидлом, а если хочу ноль внутри строки - тогда мктайплибом :) Как бы это теперь совместить?
Артур
 
   

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

Re: Строковые константы в тлб

Сообщение Хакер » 11.03.2012 (Вс) 17:18

Есть же какая-то тузла от Antonariy. Может быть она покажет меньшую глючность?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Строковые константы в тлб

Сообщение arthur2 » 11.03.2012 (Вс) 17:24

Пойду попробую :) Спасибо!
Артур
 
   

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

Re: Строковые константы в тлб

Сообщение arthur2 » 11.03.2012 (Вс) 18:11

Вдогонку: а ведь, вроде, можно как-то подключить одну тлб к другой? Что делает importlib("lalala.tlb"); и как этим воспользоваться?
Артур
 
   

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

Re: Строковые константы в тлб

Сообщение Хакер » 11.03.2012 (Вс) 18:15

arthur2 писал(а):importlib("lalala.tlb"); и как этим воспользоваться?

Создаёт зависимость. Контент не переносится из одной в другую, так что это не то.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Строковые константы в тлб

Сообщение arthur2 » 11.03.2012 (Вс) 18:23

А в чем зависимость? Что она вообще дает? Могу я в исходнике новой тлб обратиться к какой-либо из сущностей импортируемой библиотеки?
Артур
 
   

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

Re: Строковые константы в тлб

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

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

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

Re: Строковые константы в тлб

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

Antonariy писал(а):Ссылку на исходник с типом, который в текущем исходнике не описан, но который ты хочешь использовать.

Причём тут исходник? Не нужно путать import и importlib.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Строковые константы в тлб

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

На сколько я понял, после importlib я могу использовать в своей тлб те типы, которые есть в импортированной либе?
Артур
 
   

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

Re: Строковые константы в тлб

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

Хакер писал(а):
Antonariy писал(а):Ссылку на исходник с типом, который в текущем исходнике не описан, но который ты хочешь использовать.

Причём тут исходник? Не нужно путать import и importlib.
Да, обознался.
Лучший способ понять что-то самому — объяснить это другому.


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

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

Сейчас этот форум просматривают: Google-бот и гости: 29

    TopList