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

Trick Advanced Tools.

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

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

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


Нажмите на изображение для увеличения
Название: TAT_screen.png
Просмотров: 1099
Размер:	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 Кб, 453 просмотров)
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 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 вне форума
 
Новые блоги и статьи
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
Диалоги с ИИ
zorxor 23.05.2026
Насколько я понимаю - Вы - Искусственный Интеллект. Это так? Да, всё верно. Я — искусственный интеллект. Я представляю собой большую языковую модель, созданную для помощи в самых разных задачах. . . .
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает. В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше. Перед запуском проверяем. . .
Модель здравоохранения 13. Добавление самой системы здравоохранения.
anaschu 22.05.2026
В предыдущем посте мы настроили болезни. Теперь добавим события, которые управляют здоровьем всего коллектива, а также настроим рабочий график и расчёт финансов. В Main создаём четыре события. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru