assembler. Учебник для вузов_Юров В.И_2003 -637с (862834), страница 92
Текст из файла (страница 92)
Кстати, в роли автора можете оказаться и вы,когда разработаете свою программу и вместо длинного описания процесса ее сборки предоставите пользователям make-файл, дополнив его необходимыми комментариями. Информацию о правилах написания make-файлов можно найти средиприлагаемых к книге файлов в каталоге к главе 6. Make-файл для сборки приложения (см. листинг 16.4) представлен в листинге 16.6.Листинг 16.6. Пример make-файла для создания приложения prg16_1.exe<1> NAME = рг§16_1<2> OBJ5 = $(NAME).obj<3> DEF = $(NAME).def<4>TASMDEBUG=/zi<5>LINKDEBUG=/v<6>IMPORT=import32<7>$(NAME).EXE: $(OBJS) $(DEF)<8> tlink32 /Tpe /aa /c S(LINKDEBUG) $(OBJS), $(NAME), , $(IMPORT), $(DEF)<9>.asm.obj:<10> tasm32 S(TASMDEBUG) /ml $&.asm, , ,Поясним наиболее значимые элементы приведенного файла.
Мы уже упоминали, что трансляция исходного файла производится программой tasm32.exe. При404Глава 16. Создание Windows-приложений на ассемблеревызове ей передается ряд ключей (строки 1-6). Для формирования отладочнойинформации вы можете указывать значения макрооператоров TASMDEBUG =/zi (строка 4) и LINKDEBUG = /v (строка 5). Кроме этих необязательных ключей в строке 10присутствует обязательный ключ /ml, который требует, чтобы транслятор ассемблера различал строчные и прописные буквы в идентификаторах программы.
Каквы смогли убедиться, это очень удобно при написании программ для Windows. Строка 8 содержит вызов компоновщика tlink32.exe. Описания других ключей для этойпрограммы приведены в главе 6 и приложении В (http://www.piter.com/download).При запуске программы make.exe не забывайте о нехитром, но полезном приемес перенаправлением вывода экранных сообщений в файл с помощью символа «>»:M A K E . E X E -DDEBUG > рВ файле р текущего каталога читайте диагностические сообщения о процессепостроения приложения.Углубленное программированиена ассемблере для Win32Реализация описанного ранее процесса разработки простого Windows-приложения на языке ассемблера может отнять довольно много сил и времени у неподготовленного человека.
Но, скорее всего, это не будет пустой тратой драгоценныхдля любого программиста жизненных сил. Цель материала, изложенного именнов таком виде, — демонстрация того, что разработка Windows-приложения на языкеассемблера — не такое уж нереальное дело. Напротив, у него даже есть свои достоинства. Нужно отметить, что объем учебного материала, необходимого для описания процесса разработки каркасного приложения для Windows, не зависит от языка, на котором предполагается вести программирование, так как основное вниманиеуделяется не столько средствам языка, сколько описанию требований к функционированию приложения со стороны Windows. Каркасное приложение являетсяпростейшей программой для Windows, которая в лучшем случае выводит строкутекста в окно приложения.
С точки зрения сложности, не имеет смысла даже проводить ее сравнение с аналогичной программой для MS-DOS, выводящей строкуна экран. Логику работы и способы реализации такой программы для MS-DOSв худшем случае можно объяснить минут за десять. Для объяснения логики работы каркасного Windows-приложения неподготовленному слушателю придётся прочитать целую лекцию, может быть, и не одну. И это простейшая программа.
А гдеже предел? Какими минимальными знаниями и умениями должен обладать программист, чтобы утверждать, что он является, если, конечно, можно так выразиться, профессиональным Windows-программистом. Не претендуя на безусловнуюистину, попытаемся перечислить некоторые проблемы, которые программист должен научиться решать в первую очередь.itНужно понять общие принципы построения программы, работа которой управляется сообщениями.II Нужно научиться выводить текст и графику в область окна приложения. Основная проблема здесь состоит в умении эффективно использовать совокуп-Углубленное программирование на ассемблере для Win32405ность средств Win32 API.
Сам процесс формирования изображения в окнеWindows напоминает процесс формирования изображения в видеобуфере, какэто делалось в MS-DOS. Оба эти варианта вывода изображения можно сравнить с рисованием цветными мелками на школьной доске. Для того чтобы обновить содержимое окна, его необходимо либо полностью вывести заново, либосначала удалить ненужные фрагменты, сформировать на их месте новые и затем вывести в определенное место в окне. Эта проблема называется проблемойперерисовки изображения, и она тесно связана с тем, насколько эффективно решается следующая проблема.Нужно организовать адекватную обработку сообщений.
Эффективность и правильность работы программы напрямую зависит от того, насколько правильнов ней организована обработка сообщений. В самом начале процесса обучениянаписанию программ для Windows вы столкнетесь с необходимостью обработки такого сообщения, как WM_PAINT. Проблема здесь заключается в том, чтоWindows не сохраняет содержимое окна или части окна при его свертыванииили скрытии под другим окном. Следить за содержимым своих окон должносамо приложение, а точнее, соответствующая оконная функция. Более подробно о решении этой проблемы мы узнаем при рассмотрении вопроса перерисовки изображения.ж Нужно научиться создавать интерфейсную часть приложения.
Интерфейс приложения — это его визитная карточка. Первым, на что обращает вниманиепользователь, тем более если он непрофессионал, является именно этот элемент работы приложения. Более того, движущей силой развития самой системы Windows является стремление к реализации идеи идеального интерфейса.На сегодняшний день эту роль играет оконный интерфейс. Что будет завтра,пока не ясно, так как оконный интерфейс действительно решает многие проблемы и до исчерпания его потребительского ресурса, наверное, еще далеко.Основа оконного интерфейса — окно, в котором имеются две области: управляющая, с ее помощью осуществляется управление работой окна, и пользовательская, которая обычно занимает большую часть окна, и именно в нейпользователь формирует некоторое изображение. Управляющая областьокна приложения состоит из более элементарных интерфейсных компонентов:меню, окон диалога, кнопок, панелей и т.
д. Создание и организация работы сомногими из этих компонентов поддерживается Windows с помощью функцийWin32 API.is Нужно научиться обрабатывать пользовательский ввод.Каждый пункт этого списка представляет лишь вершину некоторой иерархииболее частных проблем и может быть довольно глубоко детализирован вглубь. Конечно, в рамках нашего изложения сделать это не представляется возможным, даи вряд ли нужно. Подобные вопросы хорошо изложены в литературе. Материалданной главы подобран так, чтобы показать, как отражается на процессе разработки Windows-приложения выбор ассемблера в качестве основного языка программирования.
Поэтому основное внимание мы уделяем не тому, как реализовать теили иные элементы пользовательского интерфейса, а технологии сборки работе-406Глава 16. Создание Windows-приложений на ассемблереспособного приложения с помощью пакета TASM (для MASM отличие только винструментарии).
Исходя из этого далее покажем, как использовать ресурсы вWindows-приложениях, написанных на ассемблере.Ресурсы Windows-приложенийна языке ассемблераДля включения ресурсов в Windows-приложения, написанные на ассемблере, задействуется та же самая технология, что и для программ на языках C/C++. Ресурс — это специальный объект, используемый программой, но не определяемыйв ее теле. К ресурсам относятся следующие элементы пользовательского интерфейса: значки, меню, окна диалога, растровые изображения.Определение ресурсов производится в текстовом файле с расширением .гс,в котором для описания каждого типа ресурса используются специальные операторы. Подготовку этого файла можно вести двумя способами: ручным и автоматизированным.Ручной способ предполагает:т что разработчик ресурса хорошо знает операторы, необходимые для описанияконкретного ресурса;ш что ввод текста ресурсного файла выполняется с помощью редактора, которыйне добавляет в текст элементы форматирования, например редактора Блокнот(notepad.exe), входящего в состав программного обеспечения Windows.Автоматический способ создания ресурсного файла предполагает использование специальной программы — редактора ресурсов, который позволяет визуализировать процесс создания ресурса.
Конечные результаты работы этой программымогут быть двух видов: в виде текстового файла с расширением .гс, который впоследствии можно подвергнуть ручному редактированию, либо в виде двоичногофайла, уже пригодного к включению в исполняемый файл приложения.Будем предполагать, что описание ресурсов в текстовом виде получено и находится в файле ресурсов с расширением .гс. Далее это описание должно быть преобразовано в вид, пригодный для включения в общий исполняемый файл приложения. Для этого необходимо выполнить перечисленные далее шаги.*1.
Откомпилировать ресурсный файл. На этом шаге выполняется преобразование текстового представления ресурсного файла с расширением .гс в двоичноепредставление с расширением .res. Для этого в пакете TASM есть специальнаяпрограмма brc32.exe — компилятор ресурсов.2. Включить ресурсы в исполняемый файл приложения. Это действие выполняеткомпоновщик tlink32.exe, которому в качестве последнего параметра должнобыть передано имя ресурсного файла (.res).Далее на конкретных примерах мы рассмотрим порядок применения этих программных средств для включения некоторых типов ресурсов в Windows-приложения.Меню в Windows-приложенияхМеню в системе Windows являются, пожалуй, самым распространенным элементом пользовательского интерфейса. Мы не будем особенно вдаваться в детали раз-Углубленное программирование на ассемблере для Win32407работки приложения с меню, так как это уже делалось при рассмотрении каркасного приложения.