Нюансы портирования из vb6 в с++

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 941
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Нюансы портирования из vb6 в с++

Сообщение kibernetics » 09.10.2021 (Сб) 23:01

Чел описывает переход из vb6 в c++ на примере игры
https://habr.com/ru/post/582566/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4108
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Нюансы портирования из vb6 в с++

Сообщение Mikle » 10.10.2021 (Вс) 15:39

Что-то он там с округлением длинновато намутил.

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

Re: Нюансы портирования из vb6 в с++

Сообщение Хакер » 11.10.2021 (Пн) 16:25

Ох, как же у меня зубы скрежещут, когда кто-то форсит заявление, что VB в режиме отладки является интерпретируемым языком.

Пришлось отметиться там комментом, который (как всегда) разросся до размеров целой статьи и даже с трудом уместился в лимит в 55 000 символов. Невлезающую часть коммента оформлю в виде ещё одного коммента.

https://habr.com/ru/post/582566/#comment_23578554

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

The trick
Постоялец
Постоялец
 
Сообщения: 730
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Нюансы портирования из vb6 в с++

Сообщение The trick » 11.10.2021 (Пн) 22:30

Хакер, отличный коммент)) Я кстати имел дело с PCR и BSCR модифицируя парсер.
UA6527P

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 386
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Нюансы портирования из vb6 в с++

Сообщение Diamock » 12.10.2021 (Вт) 15:47

Хакер. Как всегда, очень интересно и познавательно. Спасибо!
In der Beschrankung zeigt sich erst der Meister
Графоманю...

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

Re: Нюансы портирования из vb6 в с++

Сообщение Хакер » 13.10.2021 (Ср) 0:35

Что вы знаете о невезении?
Вчера при отправке большого коммента я столкнулся с тем, что на длину коммента есть ограничение в 55 тысяч символов. Тогда, чтобы хоть как-то логически и осмысленно закончить пост, я вынул с конца большой блок текст, который должен был идти перед финалом и написал финал, а вынутый текст я планировал дописать и запостить отдельным комментарием.

В какой-то момент, когда второй пост был написал на 95—98%, я в какой-то момент нажал на Backspace, но каким-то образом фокус был не у поле для ввода текста, а у тулбара браузера, в итоге Backspace сработал не как стирание одного символа, а как переход «Назад» (на 1 страницу назад в истории навигации) в браузере — текст был потерян!

Точнее только половина текста, потому что то, что я вырезал из первоначального поста, я вставил в Блокнот, а из него уже копировал в форму постинга при дописывании второго комментария. В итоге второй задуманный пост пришлось заново дописывать с середины.

И вот, когда он опять был в почти готовом состоянии — оставалось буквально минут 15 до публикации — отключают свет. В итоге пост утерян теперь уже целиком, потому что он был только во вкладке браузера (в готовом виде), и в блокноте (в полунаписанном виде), но сохранён он не был никуда.

То что я сделал после того, как электроснабжение восстановили: загрузился с LiveCD с nix-системой, скопировал раздел SSD, где у меня жил файл подкачки (он у меня имеет размер 10 Гб и занимает целый раздел), перезагрузился под Windows и теперь из дампа swap-раздела по кусочкам собираю пост в единое целое, примерно как археологи собирают разбитую вазу.
malchik.jpg
malchik.jpg (51.68 Кб) Просмотров: 1004
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4108
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Нюансы портирования из vb6 в с++

Сообщение Mikle » 13.10.2021 (Ср) 8:30

Что у тебя за браузер?
1. Backspace давно не работает как переход назад.
2. Если перейти назад другим способом, текст восстанавливается при переходе вперёд.
3. Даже при аварийном завершении браузеры пытаются что-то сохранять.

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

Re: Нюансы портирования из vb6 в с++

Сообщение Хакер » 13.10.2021 (Ср) 15:36

Mikle писал(а):1. Backspace давно не работает как переход назад.

Хром последней версии, какая только возможна под моей ОС.

Mikle писал(а):2. Если перейти назад другим способом, текст восстанавливается при переходе вперёд.

Я это прекрасно знаю, и во время написания первого большого поста такая фигня с непроизвольным переходом назад тоже происходила пару раз, и переход вперёд кнопкой «Вперёд» меня спасал. Но на этот раз после перехода вперёд отобразилась пустая форма. Точнее даже никакой формы не отобразилось вообще: форма ввода текста ведь создаётся динамически силами JS-скриптов по нажатию на линку «Ответить» под комментом.

Mikle писал(а):Даже при аварийном завершении браузеры пытаются что-то сохранять.

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

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

Re: Нюансы портирования из vb6 в с++

Сообщение Хакер » 14.10.2021 (Чт) 1:17

Вторая часть недо-статьи:
https://habr.com/ru/post/582566/#comment_23589108
Ещё 20 000 символов + картинки.

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

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4108
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Нюансы портирования из vb6 в с++

Сообщение Mikle » 14.10.2021 (Чт) 15:44

Мне эта ссылка на "Rosetta Code: Popular Programming Languages" уже попадалась на другом сайте, и я посчитал её крайне сомнительной.

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

Re: Нюансы портирования из vb6 в с++

Сообщение Хакер » 17.10.2021 (Вс) 1:52

Mikle писал(а):"Rosetta Code: Popular Programming Languages"

Да бог с ней, с Розеттой.

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

Я не могу понять, то ли народу не интересно, то ли написано непонятно, то ли статьи получились настолько раздутыми, что все до сих пор читают урывками. Между тем, мне бы хотелось предварительного понимания концепции трансляции текст в PCR, а PCR в BSCR и обратной трансляции из BSCR в текст, потому что только с учётом понимания этих знаний я могу рассказать другие интересные вещи.

Например, можно обсудить количество вакантных (не занятых) BSCR-кодов: от него зависит, сколько новых языковых конструкций можно было бы добавить в синтаксис VB, не ломая всю текущую схему кодирования целиком.

Или обсудить тот факт, что в VB есть следы поддержки языковых конструкций, о которых вы никогда не слышали, поддержка которых явно задумывалась, но в последний момент их решили не доделывать: в итоге для таких конструкций предусмотрен способ кодирования в BSCR, предусмотрено преобразование BSCR в текст, но не реализован путь текст—>PCR—>BSCR:
select-typeof-bscr.png
select-typeof-bscr.png (2.48 Кб) Просмотров: 939

Естественно, это не «фотошоп». Это результат ручного редактирования BSCR-данных. Существует специально предназначенная для кодирования именно такой конструкции BSCR-сущность. Существует код, который умеет реконструировать из неё обратно исходный VB-код — то есть обратное преобразование. А вот на уровне прямого преобразования поддержки конструкции нет. Поэтому ввести её естествнным в редактор кода нельзя, но если уж она есть в BSCR-воплощении, то мы будем видеть её как на скриншоте.

Т.е. ещё раз на всякий случай: картинка на скриншоте получена без фотошопинга и без патчинга кода VB IDE в каком бы то ни было виде. Только патчинг данных, хранящих бинарное представление кода.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4108
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Нюансы портирования из vb6 в с++

Сообщение Mikle » 17.10.2021 (Вс) 8:47

Хакер писал(а):удручает вялая реакция

Да просто кроме "оу, круто!" трудно ещё какую-то реакцию дать :) Я, честно говоря, и сам вполне мог назвать IDE интерпретатором. И это не потому, что я считаю, что интерпретируется текст, я понимаю, что там P-Code, просто само выполнение P-Code разве нельзя назвать его интерпретацией? Ведь не нативный код выполняется. То есть, возможно, ошибка в понимании самого термина "интерпретация".
По поводу Select TypeOf: а как будут выглядеть условные Case после этого? Или даже самого слова Case не будет, а будет какое-нибудь TypeIs?

The trick
Постоялец
Постоялец
 
Сообщения: 730
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Нюансы портирования из vb6 в с++

Сообщение The trick » 17.10.2021 (Вс) 10:17

Хакер писал(а):Меня удручает вялая реакция на мои большие посты что тут, что там.

Это очень интересно на самом деле, но просто мало кто на данный момент вообще интересуется VB6 и его внутренностями, отсюда почти нулевой фидбек. Я с удовольствием прочитал все комменты (хотя почти все это мне уже известно и я даже тут выкладывал проект с патчами разбора PCR/BSCR для поддержки ключевого слова Cdecl в пользовательских функциях). По поводу портирования кода - мне тоже не нравится когда кто-то из-за неосведомленности в чем-то начинает что-то додумывать и говорить неправду, в том числе на VB6. Но в ряде случаев доказывать кому-то что-то - терять свое время, а некоторые бывают настолько упертые, что это теряет всякий смысл. Мне кажется данные статьи (мне трудно назвать это просто комментариями) лучше опубликовать здесь (в internals), а оттуда просто кинуть ссылки сюда.

Хакер писал(а):Поэтому ввести её естествнным в редактор кода нельзя, но если уж она есть в BSCR-воплощении, то мы будем видеть её как на скриншоте.

Я тоже что-то похожее делал тут:
Изображение
UA6527P

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

Re: Нюансы портирования из vb6 в с++

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

Mikle писал(а):просто само выполнение P-Code разве нельзя назвать его интерпретацией?

Ну при таком широком толковании понятия «интерпретация», можно вообще любую обработку информации компьютером назвать интерпретацией и быть правым по-своему. Даже воспроизведения звука можно трактовать как интерпретацию LPCM-кода цифро-аналоговым преобразвоателем.

С моей точки зрения об интерпретации можно говорить только тогда, когда входной поток (чем бы он ни был) подвергается какой-то нетривиальной обработке, проверке на корректность. Как следствие, случайно взятый входной поток будет с огромной вероятностью отвергнут абстрактным интерпретаторов: из бесконечного множества всевозможных вариантов входной последовательности есть только узкая тропинка допустимых и осмысленных.

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

Если же обратиться к википедии, то там вот такое определение интерпретации:
Интерпрета́ция — построчный анализ, обработка и выполнение исходного кода программы или запроса (в отличие от компиляции, где весь текст программы, перед запуском, анализируется и транслируется в машинный или байт-код, без её выполнения).

Источники:
↑ Першиков В. И., Савинков В. М. Толковый словарь по информатике / Рецензенты: канд. физ.-мат. наук А. С. Марков и д-р физ.-мат. наук И. В. Поттосин. — М.: Финансы и статистика, 1991. — 543 с. — 50 000 экз. — ISBN 5-279-00367-0.
↑ Борковский А. Б. Англо-русский словарь по программированию и информатике (с толкованиями). — М.: Русский язык, 1990. — 335 с. — 50 050 (доп.) экз. — ISBN 5-200-01169-3.
↑ Толковый словарь по вычислительным системам = Dictionary of Computing / Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского. — М.: Машиностроение, 1990. — 560 с. — 70 000 (доп.) экз. — ISBN 5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания).



Mikle писал(а):а как будут выглядеть условные Case после этого?

Case Is Collection — например.
Что примечательно, такой Case имеет тоже свою обособленную форму BSCR-кодирования, не имеющую ничего общего с формами
Код: Выделить всё
Case expr
Case expr1 To expr2
Case Is > expr
Case Is < expr
Case Is >= expr
Case Is <= expr
Case Is <> expr
Case Is = expr

Если вот эти знакомые всем формы Case-стейтмента кодируются BSCR-кодами 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52 соответственно, то Case Is typespecifier кодируется специальной формой 0xEB.

The trick писал(а):Мне кажется данные статьи (мне трудно назвать это просто комментариями) лучше опубликовать здесь (в internals), а оттуда просто кинуть ссылки сюда.

Ну это была репетиция нормальных статей. Для раздела VB Intenals это надо грамотным образом разделить на отдельные статьи. Писать гораздо подробнее, без упрощений и обобщений. Изготовить большое число поясняющих иллюстраций. Тщательно написать и отполировать текст. В данном случае я на лету написал и, почти даже не перечитывая, опубликовал. Там и опечатки могут быть легко и ошибки какие-нибудь логические.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Нюансы портирования из vb6 в с++

Сообщение Хакер » 18.10.2021 (Пн) 3:59

Кстати, одно из интересных направлений деятельности с учётом знания обо всех этих подкапотных механизмах: обфускация кода VBA-проектов, то есть VB-кода в Excel/Word/Access-документах (но не только).

Поскольку в случае VBA при сохранении документа VB-код не реконструируется в текстовом представлении, а сохраняется прямо в виде BSCR и вспомогательных дескрипторов, возможно путём модификации сделать BSCR-код, который правильно выполняется, но совершенно неправильно отображается, и который, таким образом, нельзя ни понять, ни модифицировать.

Также можно сделать VBA-код, который сразу же после загрузки VBA-хоста поломает, полностью или частично деактивирует механизм реконструкции текстового представления (TSCR) по бинарному (BSCR). Такой код вообще никак не будет отображаться, или будет отображаться так, как нужно хакеру, но исполняться будет как обычный двоичный код.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

The trick
Постоялец
Постоялец
 
Сообщения: 730
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Нюансы портирования из vb6 в с++

Сообщение The trick » 18.10.2021 (Пн) 10:23

Интересно узнать как работает этот механизм при условной компиляции. К примеру новые типы VBA7, получается для старых проектов это сохраняется как текст, а в новых это сохраняется и как текст и как BSCR-ноды? Я всегда думал что код сохраняется и как текст и как бинарные данные, на этом основана техника vba-stomping вроде бы. Хотя там возможно P-код хранится, я не смотрел.
UA6527P

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

Re: Нюансы портирования из vb6 в с++

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

Интересно узнать как работает этот механизм при условной компиляции.

Какой именно «этот»? Механизм переконвертации VB-кода в текстовой форме в BSCR-представление?

Ему до какой-то меры плевать на условную компиляцию. Преобразованию из текстовой формы в бинарное BSCR-представление подвергаются все строки без исключения, в том числе и те, которые находятся между неактивными #If ... Then и #End If. Да и сами строки с #If/#End If тоже переконвертируются в BSCR. Словом, любая строка, которая хоть как-то видна при отрисовке кода в редакторе кода, имеет своё BSCR-воплощение.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 941
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: Нюансы портирования из vb6 в с++

Сообщение kibernetics » 19.10.2021 (Вт) 0:10

Хакер писал(а):Меня удручает вялая реакция на мои большие посты что тут, что там. На второй пост вообще почти никакой реакции.

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


Всем заинтересованным людям, безусловно интересно. И ничего тут не раздуто, а очень познавательно. Но случаются моменты, эдакие ямы, когда ну пока что по теме нечего ответить или возразить. Необходимо время.
Допустим, я вот зачитываю случайно что-то узкотехническое, но мне в тот момент это не нужно, но через некоторое время, я вспоминаю и снова перехожу, чтобы заново прочитать и осознать вновь прочитанное.

Да и, очевидно, что многим это было бы интересно, но к сожалению, сам мир вб-шников постарел, новичкам промыли мозги пайтоном. Новых ребят не заманишь просто так. Но vba ещё много где барахтается в автоматизации офисного стека. И, конечно, отрадно, что есть такие люди, которые действительно много сделали для мира VB. Я не говорю про код, а лишь, про описание внутреннего устройства.

И я также соглашусь с мнением The Trick с тем, что те тексты надо выложить в Internals. Молодёжь, которым я однажды показывал, например, твои истории про зарождение VB/Ruby с должной серьёзностью относились к написанному.
Будет статей побольше, может быть это ещё привлечёт и удержит новичков подольше.

У нас слабые методы транслирования языка в массы. Более молодые пишут про пайтон, голанг, джаву в инсте, тиктоке, ютубе и т.д. Куча групп в той же телеге. А по бейсику совсем мало евангелистов.


Кстати, желающие оставить коменты на хабре не всегда это могут просто так сделать. Так, что уверен часть ответов просто не прошла по техническим запретам хабра.

П.С. про сбор текста с обрывков из кеша браузера, это вообще тема для сериала ). Браво!

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

Re: Нюансы портирования из vb6 в с++

Сообщение Хакер » 19.10.2021 (Вт) 3:32

The trick писал(а):как текст и как BSCR-ноды?

Я решительно против использования слова «ноды» по отношению к BSCR. Ибо это ни в коей мере не графовидная и не древовидная структура, чтобы говорить о нодах. Там нет никаких явных или подразумеваемых связей между отдельными элементами кроме позиционных отношений — то есть просто кто за кем следует. Я предпочитаю название entities, то есть BSCR-сущности. Называть их нодами — это всё равно, что называть нодами буквы обычного текста. Мы называемых буквы текста символами, элементами строки, элементы юникодных строк называют кодовыми точками.

Можно подумать о приемлемости таких названий как маркеры, метки или теги. Но на ноды эта форма представления информации не тянет. Вот в PCR полноценные ноды, да.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

The trick
Постоялец
Постоялец
 
Сообщения: 730
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Нюансы портирования из vb6 в с++

Сообщение The trick » 19.10.2021 (Вт) 13:00

Хакер писал(а):Словом, любая строка, которая хоть как-то видна при отрисовке кода в редакторе кода, имеет своё BSCR-воплощение.

Я про это же. К примеру есть такая строка для VBA:
Код: Выделить всё
Private Declare PtrSafe Function GetModuleHandle Lib _
                                 "kernel32" Alias "GetModuleHandleW" ( _
                                 ByVal lpModuleName As LongPtr) As LongPtr

Для VBA7 она корректно парсится, для VB6/VBA6 - она становится красной. Так значит что VBA7 при сохранении, если учитывать это:
Поскольку в случае VBA при сохранении документа VB-код не реконструируется в текстовом представлении, а сохраняется прямо в виде BSCR и вспомогательных дескрипторов,

В проекте будут BSCR сущности, но они будут несовместимы со старыми версиями офиса и VB6. Однако при открытии они корректно отображаются и в старых версиях VBA в которых ничего неизвестно о PtrSafe.
UA6527P

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

Re: Нюансы портирования из vb6 в с++

Сообщение Хакер » 19.10.2021 (Вт) 22:27

The trick писал(а): Однако при открытии они корректно отображаются и в старых версиях VBA в которых ничего неизвестно о PtrSafe.

Уверен? Можешь прислать образец такого файла или информацию о том, в какой версии надо сохранять, а в какой загружать.

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

The trick
Постоялец
Постоялец
 
Сообщения: 730
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Нюансы портирования из vb6 в с++

Сообщение The trick » 19.10.2021 (Вт) 22:58

Хакер писал(а):Уверен? Можешь прислать образец такого файла или информацию о том, в какой версии надо сохранять, а в какой загружать.

Под "корректно" я имел в виду что весь текст отрисовывается нормально. Да она подсвечивается красным, но если бы она была распарсена на корректные BSCR сущности в новом VBA то в старом VBA об этих сущностях неизвестно. Возможно есть сущности которые описывают непосредственно текст как он есть. В старых версиях он выводится как есть, а в новых анализируется по другому.

Что произойдёт, если в старой версии в таком файле чуть подредактировать строку, например, добавить коммент в конец такой строки?

Ничего необычного. Тоже самое как в обычной синтаксически неверной строке.
UA6527P

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

Re: Нюансы портирования из vb6 в с++

Сообщение Хакер » 20.10.2021 (Ср) 0:19

The trick писал(а):Под "корректно" я имел в виду что весь текст отрисовывается нормально. Да она подсвечивается красным, но если бы она была распарсена на корректные BSCR сущности в новом VBA то в старом VBA об этих сущностях неизвестно.


А, ну это относительно легко может быть сделано.

Не является секретом, и в хабракомментах я об этом ещё раз написал, что существуют особая BSCR-сущность для кодирования заведомо синтаксически некорректных строк.
incorrect_vb_lines.png
incorrect_vb_lines.png (1.79 Кб) Просмотров: 881

Такие BSCR-сущности предполагают хранение вшитой в себя символьной последовательности некорректной строки кода как есть — в первозданном виде. Без этого в открытом редакторе VB-кода могли бы существовавать (даже на этапе написания) только 100% синтаксически правильные строки, что было бы мучением.

Так вот, новые Офисы могут обеспечивать обратную совместимость со старыми вот таким путём: при сохрании VB-кода в файл строки кода, содержащие неподдерживаемые старыми версиями фишки, сохраняются если бы они были некорректными. При открытии файла старым Офисом такая строчка для него действительно окажется некорректным и он покажет её красным цветом. При открытии же такого файла новым Офисом в нём на этот случай может быть сделана специальная обработка: каждая BSCR-сущность, кодирующая синтаксически некорректную строку, подвергается анализу — строка кода передаётся парсеру и если он её успешно разбирает, строка кода реабилитируется — вместо BSCR-сущности, кодирующей некорректную строку, принимаются в оборот BSCR-сущности полуенные в результате проверки строки на «вшивость». Строки, не прошедшие проверку на вшивость, так и остаются жить в статусе некорректных. Чисто гипотеза.

С другой стороны я могу вообще быть ошибаться насчёт хранения кода в офис-файлах. То, что там хранится BSCR — это точно, я его там находил. Кода в виде текста я там, напротив, не находил, но как оказывается, только потому, что я искал код целиком. Сейчас я внимательнее посмтрел, и вижу, что какие-то фрагменты кода в виде текста там есть, но именно как фрагменты: исходный текст порублен на какие-то куски, между которыми непечатные символы, причём порублен не по границам строк, не по границам ключевых слов, а как попало. Возможно из этого фарша восстанавливается код в виде текста в офис-файлах, а не реконстрируется из BSCR.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Народный треп

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

Сейчас этот форум просматривают: Majestic-12 [Bot], SemrushBot и гости: 1

    TopList