Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/140: Рейтинг темы: голосов - 140, средняя оценка - 4.53
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18035 / 7738 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16

Тестирование полезных кодов и примеров

15.10.2012, 00:56. Показов 30989. Ответов 301
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если Ваш код из темы Готовые решения и полезные коды на Visual Basic 6.0

неправильно собран или неработоспособен, он будет перенесен сюда.

Для доведения кода в рабочее состояние в порядке обсуждения создайте новую тему
2
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.10.2012, 00:56
Ответы с готовыми решениями:

Тестирование полезных скриптов
В этой теме нужно писать: - о багах в выложенных полезных скриптах (закрепленная тема); - ошибках в кодах, на которые ведут ссылки...

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

Cумма кодов четных символов равна сумме кодов нечетных
Даны два поля edit1 и edit2. и кнопка button1. Нужно чтобы при нажатии на кнопку, проверялось: сумма кодов четных символов была равна сумме...

301
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
09.11.2017, 20:42
Студворк — интернет-сервис помощи студентам
Расскажите что такое линковка

Добавлено через 2 минуты
Мы тут вроде взрослые, и нас не напугать ! новыми словами
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
09.11.2017, 21:33
Цитата Сообщение от VBOrion Посмотреть сообщение
А существует возможность статической линковки непосредственно в VB6 или нужно устанавливать какие-то дополнительные инструменты?
Статическая линковка "из коробки" возможна, но довольно ограниченно и некрасиво. В секции LinkSwitches прописывается нужная либа и экспортируются нужные символы из этой либы. В исполняемом файле делается декларации API из себя-же этой функции.
Недостатки:
  1. привязка к имени исполняемого файла (лечится вызовом по указателю);
  2. Нежелательный экспорт;
  3. Невозможность инициализации, к примеру CRT. Поэтому очень ограничено;
  4. Не работает в IDE.
Второй вариант более правильный, но более трудоемкий. Нужно перехватить обращение к линкеру и сделать замену какого-либо модуля заглушки, на переходник на нужный символ.
К примеру если хотим прилинковать какой-либо lib файл к нашему EXE, то нужно создать модуль с функциями-заглушками, с нужными прототипами. Существует проблема манглинга в именовании функций (к примеру имя символа функции foo модуля bar будет ?foo@bar@@AAGXXZ), поэтому нужно будет делать переходник (к примеру на FASM'е или руками) который будет иметь эти символы и jmp'ать на линкуемые. Если линкуется какой-нибудь модуль C++, то нужно указать в качестве стартовой или mainCRTStartup, _DllMainCRTStartup или другую необходимую, а в переходнике из main, _DllMain или другой делать прыжок на ___vbaS. Способ не содержит вышеприведенных недостатков кроме последнего.
Для обоих вариантов можно юзать DLL вместо либы, для отладки в IDE.
1
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
09.11.2017, 21:43
The trick, ну что значит если у меня есть заготовки к проекту
есть у тебя инфа на этот счет, расскажи кто не знает

Добавлено через 1 минуту
и где он собственно размещается этот самый линкер
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
09.11.2017, 21:47
Цитата Сообщение от fever brain Посмотреть сообщение
The trick, ну что значит если у меня есть заготовки к проекту
есть у тебя инфа на этот счет, расскажи кто не знает
Я бы скинул пример, но мой Add-in работает нестабильно. Так что нужно либо ждать фикса чтобы правильно перехватить вызов к линкеру, либо как-то самим перехватывать. Первый способ я кидал где-то в блоге.
2
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
09.11.2017, 21:54
Ну ястно, в общих чертах дополню что это сообщение компилятору, оно находится в самом низу проекта если проект открыть например блокнотом...

Добавлено через 39 секунд
в обычной ситуации такой линкер:
[MS Transaction Server]
AutoRefresh=1

Ну расскажи пожалуйста, не ходи вокруг да около

Добавлено через 3 минуты
И чем замечательна эта запись:
[MS Transaction Server]
AutoRefresh=1
явно не случайно ее ставят ?
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
09.11.2017, 21:59
Цитата Сообщение от fever brain Посмотреть сообщение
в обычной ситуации такой линкер:
[MS Transaction Server]
AutoRefresh=1
Нет. Линкер - это компоновщик LINK.exe в папке VB98.
1
 Аватар для VBOrion
10 / 6 / 0
Регистрация: 06.11.2017
Сообщений: 21
09.11.2017, 22:06
Цитата Сообщение от fever brain Посмотреть сообщение
Мы тут вроде взрослые, и нас не напугать ! новыми словами
Чтобы не распространять лишние длл, можно готовый код "вшить" непосредственно в ехе. В C++ это к примеру обычная практика :
C++
1
#pragma comment(lib,"ntdll.lib")
The trick, спасибо за ответ.
Ясно, нужно переварить это для начала. Второй способ кажется каким-то трюкачеством .
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
09.11.2017, 22:18
Переваривайте.. , только не перестарайиесь )) почитайте его блоги ...

Добавлено через 5 минут
VBOrion, Вы впервые здесь ?
0
 Аватар для VBOrion
10 / 6 / 0
Регистрация: 06.11.2017
Сообщений: 21
09.11.2017, 22:52
Цитата Сообщение от fever brain Посмотреть сообщение
Переваривайте.. , только не перестарайиесь ))
Попробую что-нибудь написать, по результатам здесь отпишу.
The trick, а как лучше сделать. По мне видится два пути - либо написать свой линкер, который будет передавать данные уже в родной линкер или попробовать выяснить каким способом вызывается линкер и если это выполняется через к примеру CreateProcess то перезаписать на свою фильтрующую функцию в IAT?

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от fever brain Посмотреть сообщение
VBOrion, Вы впервые здесь ?
Здесь, да.

0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
10.11.2017, 09:24
Цитата Сообщение от VBOrion Посмотреть сообщение
The trick, а как лучше сделать. По мне видится два пути - либо написать свой линкер, который будет передавать данные уже в родной линкер или попробовать выяснить каким способом вызывается линкер и если это выполняется через к примеру CreateProcess то перезаписать на свою фильтрующую функцию в IAT?
Проще - написать линкер с переадресацией аргументов. С перехватом CreateProcess тоже неплохая идея. Как хочешь - так делай.
0
 Аватар для VBOrion
10 / 6 / 0
Регистрация: 06.11.2017
Сообщений: 21
10.11.2017, 12:49
The trick, спасибо!
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,020
Записей в блоге: 7
26.08.2018, 16:17
Чем эта библиотека лучше скажем GDI+?
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
27.08.2018, 11:47
locm, ну к примеру она поддерживает режимы смешивания, которых нет в GDI+. Есть поддержка OpenGL с рендерингом на GPU. Даже на CPU либа в общем работает быстрее чем GDI+. Также эта библиотека с открытым исходным кодом, соответственно изучив данное API с легкостью можно программировать под любую платформу. Плюс другие возможности как работа с SVG/PDF.
1
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
27.08.2018, 14:15
Цитата Сообщение от locm Посмотреть сообщение
Чем эта библиотека лучше
Её можно на Пурике пощупать, есть рабочий враппер, я как то качал с оф.форума Пурика пару лет назад.
Но после встроенных в Пурик 2DDrawing library, Sprite и VectorDrawing это конечно выглядит более примитивно.
Для VB6 нормально.
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
28.08.2018, 12:02
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Но после встроенных в Пурик 2DDrawing library, Sprite и VectorDrawing это конечно выглядит более примитивно
Чем выглядит? Поверхностный анализ (без углубления) наоборот показывает то что cairo более мощная чем любая из этих библиотек. Я могу ошибаться и поправьте меня те кто разбирается если это так.
VectorDrawing не поддерживает блендинг, не позволяет отключать AA, использует примитивные заливки и т.п. Насколько я понял использует урезанную cairo (да и это видно по функциям работы с SVG и PDF и способу рисования). 2DDrawing еще более урезанная либа не поддерживает антиалиасинг, произвольные маски, заливки и т.п. Sprite предназначена для спрайтов и не поддерживает рисование примитивов, только работа со спрайтами.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,020
Записей в блоге: 7
05.09.2018, 15:30
Цитата Сообщение от The trick Посмотреть сообщение
Насколько я понял использует урезанную cairo
VectorDrawing использует GDI+
SVG только для Linux, а PDF для Linux и MacOS X.
Преимущество 2DDrawing и VectorDrawing в данном случае в том, что используются библиотеки ОС и размер приложения получается небольшим и не нужно вместе с ним распространять dll размером десятки мегабайт.

Цитата Сообщение от The trick Посмотреть сообщение
2DDrawing еще более урезанная либа не поддерживает антиалиасинг, произвольные маски, заливки
Потому что GDI и кроссплатформенность.

Цитата Сообщение от The trick Посмотреть сообщение
VectorDrawing не поддерживает блендинг
Может не так понял, но это разве не оно? https://www.purebasic.com/docu... layer.html
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
05.09.2018, 15:50
Цитата Сообщение от locm Посмотреть сообщение
Преимущество 2DDrawing и VectorDrawing в данном случае в том, что используются библиотеки ОС и размер приложения получается небольшим и не нужно вместе с ним распространять dll размером десятки мегабайт.
Десятки? Про преимущество ничего сказано не было, было сказано про примитивность. Насчет использования cairo я эту информацию взял отсюда:
On Linux the result is a cairo_t pointer, so you can use cairo_set_operator() (http://cairographics.org/manual/cairo-c ... t-operator) to do the same thing.
, т.е. получается она использует cairo на Linux. Насколько я понял в этом случае код cairo включается в exe, а не использует библиотеки ОС (могу ошибаться т.к. не силен в Linux/MacOS).

Цитата Сообщение от locm Посмотреть сообщение
Потому что GDI и кроссплатформенность.
Пожалуйста скомпилируй пример с CustomFilterCallback.
Сам сделал. Вижу что GDI не используется для рисования примитивов в этом случае:
PureBasic
1
2
3
4
5
6
7
      DrawingMode(#PB_2DDrawing_CustomFilter)      
      CustomFilterCallback(@FilterCallback())
      
      Line(0, 0, 300, 500, 1234)
      Box(100, 10,50,80)
      Circle(100, 100, 100, $0000FF)   
      Circle(300, 100, 100, $000000)
Смотрю имопрт:

Нет ни MoveToEx, ни LineTo, ни Rectangle, ни Ellipse.
Кликните здесь для просмотра всего текста
Сразу скажу что и динамически не подгружаются функции, а рисуется все кодом, т.к. GDI не предоставляет такую функциональность.


Цитата Сообщение от locm Посмотреть сообщение
Может не так понял, но это разве не оно? https://www.purebasic.com/docu... layer.html
Нет, в GDI+ этого нет. Это как тут (Darken, Multiply, LinearBurn, Screen и т.д.).
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,020
Записей в блоге: 7
05.09.2018, 17:14
Цитата Сообщение от The trick Посмотреть сообщение
Насчет использования cairo я эту информацию взял отсюда:
Это для Linux. Для Windows используется GDI+. Библиотеки PB построены так чтобы по максимуму использовать средства ОС. К примеру GUI в винде строится средствами WinAPI, в Linux на выбор, GTK2, GTK3 и Qt. Что в MacOS X точно не помню. Т. е. кроссплатформенные функции одни и те же, а что используется зависит от платформы и выбора подсистемы. К примеру в винде для библиотеки спрайтов можно выбрать DX7, DX9, DX11 или OpenGL что удобно поскольку код код остается прежним, а изменяется только подсистема в опциях проекта.
Вот как-то так.

Цитата Сообщение от The trick Посмотреть сообщение
Насколько я понял в этом случае код cairo включается в exe
Непохоже. Размер исполняемого файла около 150 КБ.
Архив *.tar.gz форум не позволяет загрузить.
Вложения
Тип файла: 7z BeginVectorLayer.7z (53.3 Кб, 11 просмотров)
2
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
05.09.2018, 18:18
Цитата Сообщение от locm Посмотреть сообщение
Непохоже. Размер исполняемого файла около 150 КБ.
Вижу что используется cairo. Согласно документации GTK+ использует cairo, получается просто динамически привязывается.
0
39 / 39 / 8
Регистрация: 15.08.2014
Сообщений: 634
01.03.2019, 08:43
Цитата Сообщение от Dragokas Посмотреть сообщение
В режиме IDE возвращается правильная версия системы (Major / Minor / Build) вне зависимости, подключен манифест или нет.
Используется запрос к WMI. Это нужно для нормальной отладки программ под IDE.
В релизе подсистема WMI не ипользуется, поэтому Вам все равно обязательно нужно подключать манифест. См. детали по ссылке выше.
Перед использованием класса, замените все обработчики ошибок AppendErrorLogFormat на свои или закомментируйте автозаменой.
на win 10 14393
Возвращает: Os Version :Windows 10 x64 Unknown Edition (Build 14393)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.03.2019, 08:43

Парочка полезных видеоуроков по C++
323e1ffiYjw AEA7GmPli5Y OH7g2lfsYEU Может какой-нибудь следующий "учитель" посмотрит и передумает делать свои уроки :)

Удаленное тестирование приложение/Пересылка на тестирование
Если кто-то написал приложение под андроид и захочет показать другому человеку, то достаточно отослать apk. А как обстоит с этим дело в...

Unit -тестирование или автоматизированное тестирование
Доброго времени суток. Я программирую «для себя» второй год, на выходе получаются разного рода приложения от постоянно подающих с...

Не Большой Набор Полезных Функций
Функция проверки на наличие не запрещенных символов в поле, где ? - запрещенные символы Function Check_BadSymbols(sStr As String) As...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
140
Ответ Создать тему
Новые блоги и статьи
Сезонность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru