EasyConsole — создать консольное приложение на VB просто

Здесь можно найти готовые «кирпичики» — части кода, пригодные для построения более крупных проектов, а также решения различных типовых и не очень задач на VB.

Модератор: Brickgroup

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

EasyConsole — создать консольное приложение на VB просто

Сообщение Хакер » 19.01.2013 (Сб) 2:13

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

Этот кирпич позволяет создать на VB(VB6) полноценное консольное приложение, приложив к этому рекордный минимум усилий: добавив в проект около 10 строк кода :!:

Сам кирпич — обычный модуль EasyConsole (easycons.bas):
Последняя версия:

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

  1. Добавить модуль EasyConsole в свой проект.

  2. Подключить в Project→References библиотеку типов «Microsoft Scripting Runtime», известную некоторым обывателям как FSO.
    easycons_step_two.png
    easycons_step_two.png (70.22 Кб) Просмотров: 4971
    Учтите, что до того, как вы его добавите, искать этот пункт надо где-то в середине списка.

  3. Заставить VB генерировать «консольные» EXE-шники. Когда мой плагин ACM-Tools будет сделан, для этого понадобится всего-лишь установить один чекбокс в свойствах VB-проекта. Но пока я не сделал этот плагин, вам нужно будет отредактировать VBP-файл (файл проекта) вручную в Блокноте, добавив в него следующие две строки:
    Код: Выделить всё
    [VBCompiler]
    LinkSwitches=-subsystem:console

    Выглядеть это будет примерно так:
    easycons_step_three.png
    easycons_step_three.png (22.71 Кб) Просмотров: 4971


После этого можно использовать модуль и компилировать полноценные консольные приложения на VB6!

Использование заключается в следующем:
  • Вы однократно вызываете функцию EasyconInitialize из модуля EasyConsole.
  • Вы из любого места в своём проекте обращаетесь к объектам stdin, stdout или stderr для управления своей консолью.
    Например такой код:
    Код: Выделить всё
    stdout.WriteLine "Hello Wolrd! Long Live VBStreets!"

    Выведет в консоль строчку «Hello Wolrd! Long Live VBStreets!».

Разобраться с кирпичом вам помогут примеры:
examples.zip
Архив с примерами (4 примера)
(22.12 Кб) Скачиваний: 686


В архиве 4 примера:
  • HelloWorld — просто выводит некоторый приветственный текст в консоль.
    sample_helloworld.png
    sample_helloworld.png (12.42 Кб) Просмотров: 4971


  • Reversor — вы вводите в консоли слово или предложение, а программа выводит его в консоль в отзеркаленном (strreverse) виде.
    sample_reversor.png
    sample_reversor.png (16.21 Кб) Просмотров: 4971


  • SimpleShell — тупая примитивная оболочка командной строки (типа cmd.exe). Поддерживает около 9 команд и запуск внешних программ.
    sample_simpleshell.png
    sample_simpleshell.png (22.63 Кб) Просмотров: 4971


  • VbGrep — упрощённый вариант утилиты grep — в командной строке указываются слова для поиска (через пробел), утилита читает текст из stdin-а и выводит в stdout только те строки, в которых встречаются искомые слова. Заодно выводится и номер строки, в которой найдено искомое слово. В примере надо запускать не саму утилиту, а батник TEST_VBGREP.BAT, который скармливает утилите текстовый файл с текстом песни Jingle Bells, а в качестве слов для поиска указываются слова «the» и «fun».
    sample_vbgrep.png
    sample_vbgrep.png (21.17 Кб) Просмотров: 4971


Шаблон (Template)
Кроме того, для вашего удобства, чтобы вам каждый раз не приходилось создавать проект, добавлять в него модуль, добавлять пункт в Project→References и править файл проекта в блокноте, я сделал шаблон, который позволит сразу создавать проект с нужными преднастройками:
template_project.png
template_project.png (23.55 Кб) Просмотров: 4971

Вы, возможно, знакомы с механизмом шаблонов если добавляли шаблон от FNDLL. Для того, чтобы установить шаблон, вам нужно скачать вот этот архив:
template_1.0.0.zip
Шаблон проекта (с модулем с версией 1.0.0)
(1.51 Кб) Скачиваний: 604

И распаковать его содержимое в папку с шаблонами проектов.

Допустим, если VB6 у вас установлен по стандартному расположению:
c:\program files\Microsoft Visual Studio\VB98\
То вам нужно распаковать файлы в эту папку:
c:\program files\Microsoft Visual Studio\VB98\Template\Projects

Минусы
У этого решения есть один минус. Консольные приложения нельзя отлаживать. Вернее, отлаживать конечно можно, но попытка записать что-нибудь в stdout при работе под отладкой (или прочитать что-либо из stdin-а) приведё к ошибке (которую, тем не менее, можно обработать).

Если для вас отладка является критичной, я вижу два варианта решения этой проблемы:
  1. Сделайте копию файла VB6.EXE и назовите её, скажем, VB6CON.EXE. Затем с помощью утилиты EDITBIN отредактируйте этот файл, изменив значение поля subsystem на console. То есть примерно так:
    vb6con.png
    vb6con.png (11.3 Кб) Просмотров: 4971

    После чего для работы над своими консольными проектами используйте в качестве IDE именно VB6CON.EXE, а не простую VB6.EXE. В этом случае вместе со средой будет создаваться консольное окно, и ваши отлаживаемые консольные программы будут работать полноценно, так же, как вели бы себя в скомпилированном виде.
    Утилита editbin входит в состав и Visual Studio 6, и Platform SDK, так что она должна у вас быть, разве что вы не один из тех странных людей, которые ставят только VB6, а не всю VS6. Но в любом случае можно отредактировать vb6con.exe любым другим редактором PE-файлов.

  2. Совершенно другой вариант. Можно создать класс или форму CDbgConsoleEmulator, в которой написать Implements ITextStream и реализовать этот интерфейс. В модуле же EasyConsole с помощью описанной мною элегантной технологии определения того, под отладкой ли работает проект, нужно в при работе под отладкой вместо FSO-шных объектов подсовывать экземляр вашего класса CDbgConsoleEmulator (который может быть не просто классом, но и формой в том числе). Этот экземпляр будет сам обрабатывать вызовы Read/ReadLine/Write/WriteLine и что-то делать. Например, если это будет форма — полностью эмулировать интерфейс консоли.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Вернуться в Кирпичный завод

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

    TopList