В разделе «Наши проекты» есть тема-спутник — в ней рассуждения по технологии, хвалебные отзывы и критика.
Этот кирпич позволяет создать на VB(VB6) полноценное консольное приложение, приложив к этому рекордный минимум усилий: добавив в проект около 10 строк кода
Сам кирпич — обычный модуль EasyConsole (easycons.bas):
Последняя версия:
Для того, чтобы воспользоваться кирпичом, нужно выполнить всего лишь три действия:
- Добавить модуль EasyConsole в свой проект.
- Подключить в Project→References библиотеку типов «Microsoft Scripting Runtime», известную некоторым обывателям как FSO.
Учтите, что до того, как вы его добавите, искать этот пункт надо где-то в середине списка. - Заставить VB генерировать «консольные» EXE-шники. Когда мой плагин ACM-Tools будет сделан, для этого понадобится всего-лишь установить один чекбокс в свойствах VB-проекта. Но пока я не сделал этот плагин, вам нужно будет отредактировать VBP-файл (файл проекта) вручную в Блокноте, добавив в него следующие две строки:
- Код: Выделить всё
[VBCompiler]
LinkSwitches=-subsystem:console
Выглядеть это будет примерно так:
После этого можно использовать модуль и компилировать полноценные консольные приложения на VB6!
Использование заключается в следующем:
- Вы однократно вызываете функцию EasyconInitialize из модуля EasyConsole.
- Вы из любого места в своём проекте обращаетесь к объектам stdin, stdout или stderr для управления своей консолью.
Например такой код:- Код: Выделить всё
stdout.WriteLine "Hello Wolrd! Long Live VBStreets!"
Выведет в консоль строчку «Hello Wolrd! Long Live VBStreets!».
Разобраться с кирпичом вам помогут примеры:
В архиве 4 примера:
- HelloWorld — просто выводит некоторый приветственный текст в консоль.
- Reversor — вы вводите в консоли слово или предложение, а программа выводит его в консоль в отзеркаленном (strreverse) виде.
- SimpleShell — тупая примитивная оболочка командной строки (типа cmd.exe). Поддерживает около 9 команд и запуск внешних программ.
- VbGrep — упрощённый вариант утилиты grep — в командной строке указываются слова для поиска (через пробел), утилита читает текст из stdin-а и выводит в stdout только те строки, в которых встречаются искомые слова. Заодно выводится и номер строки, в которой найдено искомое слово. В примере надо запускать не саму утилиту, а батник TEST_VBGREP.BAT, который скармливает утилите текстовый файл с текстом песни Jingle Bells, а в качестве слов для поиска указываются слова «the» и «fun».
Шаблон (Template)
Кроме того, для вашего удобства, чтобы вам каждый раз не приходилось создавать проект, добавлять в него модуль, добавлять пункт в Project→References и править файл проекта в блокноте, я сделал шаблон, который позволит сразу создавать проект с нужными преднастройками:
Вы, возможно, знакомы с механизмом шаблонов если добавляли шаблон от FNDLL. Для того, чтобы установить шаблон, вам нужно скачать вот этот архив:
И распаковать его содержимое в папку с шаблонами проектов.
Допустим, если VB6 у вас установлен по стандартному расположению:
c:\program files\Microsoft Visual Studio\VB98\
То вам нужно распаковать файлы в эту папку:
c:\program files\Microsoft Visual Studio\VB98\Template\Projects
Минусы
У этого решения есть один минус. Консольные приложения нельзя отлаживать. Вернее, отлаживать конечно можно, но попытка записать что-нибудь в stdout при работе под отладкой (или прочитать что-либо из stdin-а) приведё к ошибке (которую, тем не менее, можно обработать).
Если для вас отладка является критичной, я вижу два варианта решения этой проблемы:
- Сделайте копию файла VB6.EXE и назовите её, скажем, VB6CON.EXE. Затем с помощью утилиты EDITBIN отредактируйте этот файл, изменив значение поля subsystem на console. То есть примерно так:
После чего для работы над своими консольными проектами используйте в качестве IDE именно VB6CON.EXE, а не простую VB6.EXE. В этом случае вместе со средой будет создаваться консольное окно, и ваши отлаживаемые консольные программы будут работать полноценно, так же, как вели бы себя в скомпилированном виде.
Утилита editbin входит в состав и Visual Studio 6, и Platform SDK, так что она должна у вас быть, разве что вы не один из тех странных людей, которые ставят только VB6, а не всю VS6. Но в любом случае можно отредактировать vb6con.exe любым другим редактором PE-файлов. - Совершенно другой вариант. Можно создать класс или форму CDbgConsoleEmulator, в которой написать Implements ITextStream и реализовать этот интерфейс. В модуле же EasyConsole с помощью описанной мною элегантной технологии определения того, под отладкой ли работает проект, нужно в при работе под отладкой вместо FSO-шных объектов подсовывать экземляр вашего класса CDbgConsoleEmulator (который может быть не просто классом, но и формой в том числе). Этот экземпляр будет сам обрабатывать вызовы Read/ReadLine/Write/WriteLine и что-то делать. Например, если это будет форма — полностью эмулировать интерфейс консоли.