Форум программистов, компьютерный форум, киберфорум
The trick
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Trick Advanced Tools.

Запись от The trick размещена 28.09.2016 в 11:03
Показов 7506 Комментарии 2

Всем привет!
Представляю вашему вниманию небольшую разработку - Add-in который позволяет в некоторой степени облегчить отладку некоторых программ, а также расширяет возможности компиляции. Все исходные коды прилагаются.
Данный Add-in имеет следующие возможности:
  • Исправляет баг с Not Not Array после которого часто выскакивала ошибка "Expression too complex" если начать работать с вещественными числами;
  • Позволяет использовать константы условной компиляции автоматически в зависимости от режима работы (IDE/EXE), как например в C++ (NDEBUG);
  • Позволяет отключать проверку переполнения целочисленных операций в IDE;
  • Позволяет отключать проверку операций с плавающей точкой в IDE;
  • Позволяет отключать проверку границ массивов в IDE;
  • Предоставляет события компиляции/линковки (для компиляции также в режиме работы в IDE/EXE), т.е. можно выполнять команды до и после этих событий. Используя эти события можно делать много чего полезного (шифрование, подмену OBJ файлов, статическую линковку и т.п)

Как это работает?


Нажмите на изображение для увеличения
Название: TAT_screen.png
Просмотров: 1151
Размер:	27.4 Кб
ID:	3981

Для исправления бага Not Not, а также отключения проверок используется модуль замены обработчиков опкодов (P-code) на наши с отключенными проверками. Сначала ищется в таблица опкодов по сигнатуре в секции ENGINE модуля vba6.dll. Опкоды бывают одно и двух байтовые. Однобайтовые опкоды имеют номер меньший 0xFB, остальные двухбайтовые. Для поиска таблиц я использовал дизассемблер длин от Ms-Rem'а который я портировал на VB6. Также ищется процедура обработки перехода на следующий опкод, а также адрес процедуры генерации ошибки. Поскольку очень легко теперь стало уронить VB, я все-таки оставил некоторые проверки. К примеру обращение к неинициализированному массиву неизбежно вызовет креш - такие ситуации обрабатываются обработчиками. Поскольку не существует (по крайней мере я не нашел) никакой официальной документации по опкодам VB6, все исследования я делал сам, поэтому какие-либо опкоды могут вызвать ошибки. В этом случае пишите примеры сюда - я добавлю обработчики.
Для остальных фичей используется обычный сплайсинг функций:
  • TipCompileProject;
  • TipCompileProjectFull;
  • TipMakeExe2;
  • TipFinishExe2.
Для установки/получения констант условной компиляции есть функции TipSetConstantValues/TipGetConstantValues из VBA6.dll. В качестве событий используется обычный вызов ShellExecuteEx. Существуют события до начала компиляции проекта, после (в IDE); тоже самое для (EXE) + до начала и после линковки.
Проект очень слабо тестировался, поэтому могут быть многочисленные баги - пишите сюда.
Всем спасибо за внимание!
Вложения
Тип файла: zip TrickAdvancedTools.zip (72.5 Кб, 479 просмотров)
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Аватар для Dragokas
    Спасибо большое за проделанную работу и отдельно за исходники. Назовём это VB6 IDE service pack 7 ?

    Действительно некоторые ошибки попадались часто.
    Анатолий, я думаю, было бы очень здорово, если бы ты смог найти время, чтобы дополнить описание еще и примерами операций, которые приводят к ошибкам, чей обход ты производишь с помощью аддона.
    Отдельный +, если ты ещё и приведешь пример, как обойти ошибку средствами только IDE, но уже без этого аддона (для сравнения так сказать).

    Хотя бы, те же ситуации когда нужно:
    Visual Basic
    1
    
    1000 * 1000
    Можно заменить на
    Visual Basic
    1
    
    1000 * clng(1000)
    или на:
    Visual Basic
    1
    
    Private Declare Function Mul Lib "msvbvm60.dll" Alias "_allmul" (ByVal dw1 As Long, ByVal Reserved As Long, ByVal dw3 As Long, ByVal Reserved As Long) As Long
    Подмену obj также встречал, но там делалось через прокси-процесс.

    На счёт предустановленной константы условной компиляции (IDE/EXE), какие ты дал им названия?

    На счёт TipGetConstantValues, подразумевается, что в IDE уже есть какие-то свои константы, как например в VBA - #VBA7 ? Если да, неплохо бы сразу привести их список. Если нет, то не помешал бы также пример использования подобной техники, хотя бы декларации.
    Мне например, нужно собрать один и тот же проект в автоматическом режиме (консольной командой), но с разными опциями. 1 - #Debug = true, 2 - чтобы #Debug = false. Вот хотелось бы мини-пример.
    Сейчас в VB6 это сделано не совсем удобно, т.к. область видимости #переменной ограничивается модулем. Глобальная видимость, как я понимаю, сделано у тебя, будет намного более предпочтительной.

    И ещё, сразу столкнулся со сложностью, т.к. никогда не устанавливал чужие аддоны без установщика.
    Было бы неплохо написать, в какую папку копировать твой DLL, чтобы увидеть его в списках аддонов.

    Еще раз спасибо за работу и ответы.
    Запись от Dragokas размещена 30.09.2016 в 12:28 Dragokas вне форума
  2. Старый комментарий
    Dragokas, сорри не видел твой коммент. Отвечу позже, т.к. там сейчас обнаружен маленький, баг. Как исправлю дам все пояснения.
    Запись от The trick размещена 10.11.2016 в 18:35 The trick вне форума
 
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru