Работа с консолью в среде Windows. Организация ввода-вывода в консольном приложении Windows.
Минимальная программа консольного приложения
Минимальная программа консольного приложения на ассемблере выглядит так:
.model flat.STDCALL;модель памяти flat. i ncludeWindowConA.i nc :Обьявление внешними используемых в данной программе функций Win32 (ASCII): extrn AllocConsole:PROC extrn SetConsoleTitleA:PROC extrn ExitProcess:PROC .data TitleText db 'Минимальное консольное приложение Win32'.0 .code start proc near:точка входа в программу: :запрос консоли call AllocConsole проверить успех запроса консоли test eax.eax jz exit:неудача:выведем заголовок окна консоли SetConsoleTitle: push offset TitleText call SetConsoleTitleA проверить успех вывода заголовка test eax.eax jz exit;неудача exit::выход из приложения :готовим вызов VOID ExitProcess(UINT uExitCode) push 0 call ExitProcess start endp end start
Если убрать комментарии, то кода будет совсем немного. В нем представлены вызовы трех функций: AllocConsole, SetConsoleTitle, ExitProcess.
Первой функцией консольного приложения должна быть функция запроса консоли AllocConsole.
B00L AllocConsole(VOID);
Для вызова функции AlIocConsole не требуется никаких параметров. В случае успеха функция AlIocConsole возвращает ненулевое значение, при неудаче – нуль. Выделенная консоль представляет собой типичное для Windows окно. Процесс в конкретный момент времени может использовать одну консоль. Если ему нужно запустить еще одну консоль, то прежняя должна быть закрыта или освобождена с помощью функции FreeConsole.
B00L FreeConsole(VOID);
В случае успеха функция FreeConsol e возвращает ненулевое значение, при неудаче – нуль.
При завершении процесса выделенная процессу консоль освобождается автоматически. В нашем случае использован именно этот вариант закрытия консоли – функцией ExitProcess.
VOID ExitProcesstUINT uExitCode):
Функции ExitProcess передается код завершения процесса и всех завершаемых цепочек в этом процессе. Проанализировать этот код можно с помощью функций GetExitCodeProcess и GetExitCodeThread. В общем случае в различных ветвях кода может быть несколько точек выхода с вызовом ExitProcess. Задавая различные значения кода завершения, можно таким образом идентифицировать причину завершения процесса.
Окно консоли может иметь заголовок, для отображения которого предназначена функция SetConsoleTitle.
B00L SetConsolеTitle(LPCTSTR lpConsoleTitle);
Функция SetConsoleTitle имеет один параметр – указатель на строку с заголовком консоли, заканчивающуюся нулем.