Ранее мы подробно разобрались с тем, что собой представляет простое Windows- приложение, написанное на языке ассемблера. Излагая материал, мы упоминали имена файлов, которые нужны для получения работоспособного исполняемого модуля программы. Для устранения возможных неясностей соберем и системати- зируем эту информацию. . При разработке Windows-приложений на языке ассемблера с помощью Win32 API вам нужен один из пакетов ассемблера — не обойтись без пакета TASM вер- сии 5.0. Современные 32-разрядные операционные системы Windows используют формат РЕ исполняемого файла. В состав пакета TASM 5.0 входят два компилято- ра ассемблера — 16- и 32-разрядный. Они имеют имена исполняемых файлов, со- ответственно, tasm.exe и tasm32.exe. То же касается и редакторов связей — tlink.exe и tlink32.exe. Получить файл формата РЕ можно только при совместном использо- вании файлов tasm32.exe и tlink32.exe. Для удобства работы, подобно тому, как мы это делали для 16-разрядных программ в главе 6, скопируйте все файлы 32-раз- рядной версии в отдельный каталог и назовите его, например, Work32. Сюда же необходимо поместить файлы wiпdоwsА.iпс и imроrtЗ2.Иb, находящиеся среди фай- лов, прилагаемых к книге. Для создания программы нужны еще два файла: файл определений компонов- щика и файл описания ресурсов. Файл описания ресурсов будет рассмотрен в сле- дующем разделе. Что касается файла определений компоновщика, то его содержи- мое довольно подробно описывается в различных источниках, и его роль ничем не отличается от роли аналогичного файла при разработке Windows-приложений на других языках. Назначение файла определений компоновщика состоит в том, что- бы предоставить редактору связей информацию о способе загрузки программы. Несмотря на то что в архитектуре Win32 нет особого смысла использовать данный файл, редактор tlink32.exe требует указания этого файла среди файлов, подавае- мых ему в качестве входных. Вы можете без проблем задействовать готовый вари- ант этого файла, находящийся среди файлов, прилагаемых к книге. Перечислим необходимые для разработки Windows-приложения файлы. Файл с исходным текстом программы (.asm). Формируется программистом. Включаемый файл с описаниями структур данных и констант Win32 (.inc или .аsh). Файл формируется программистом по мере расширения используемых им средств Win32. Источником информации для этого файла служат включае- мые файлы (.h) из пакета компилятора C/C+ + , например VC + + версии 4.0 и выше. я Файл с библиотекой импорта imроrt:З2.lib. Этот файл требуется компоновщику для разрешения внешних ссылок на функции Win32 API. Вы можете создать этот файл сами. Такая необходимость может возникнуть, если вам понадобятся функции из библиотек DLL, информация о которых отсутствует в существую- щем варианте файла imроrtЗ2.lib. Для этого существует специальная утилита implib.exe, поставляемая в пакете TASM 5.O. Командная строка для ее запуска имеет вид imрlib имя_файла_lib список_dll_библиотек Получить информацию о местонахождении конкретной функции Win32 API довольно просто. Многие справочные руководства по Windows при описании конкретной функции приводят и информацию о библиотеке DLL, где эта функ- ция содержится. * Файл с описанием ресурсов, используемых в приложении. ⅞ Другие файлы. Например, в рассмотренной нами программе каркасного при- ложения (см. листинг 16.4) используются звуковые файлы (.wav). ■ т Файлы tasm32, tlink32.exe и, возможно, некоторые другие вспомогательные фай- лы из пакета TASM 5.O. Следите внимательно за сообщениями. В том случае, если какого-либо файла будет недоставать, его нужно просто найти в каталоге \biп пакета TASM 5.0 и скопировать в свой рабочий каталог. Непосредственно в каталоге \biп работать не рекомендуется, иначе он моментально превратится в слабоструктурируемое нагромождение файлов. II Компилятор ресурсов brc32.exe или brcc32.exe. Компиляторы взяты из пакета C/C++ фирмы Borland. Но если вы работаете с пакетом VC+ + , то вам может понадобиться компилятор ресурсов, входящий в этот пакет. Он называется rс,ехе. т Файл makefile и утилита make.exe. Эти файлы призваны облегчить процесс сбор- ки приложения в единый исполняемый модуль. Приведенный список файлов, необходимых для сборки Windows-приложения, довольно велик. Ранее процесс получения исполняемого файла у нас был простым и вполне управлялся из командной строки (без использования, например, make- файлов). Более сложные приложения требуют учета взаимосвязей между несколь- кими файлами. Данные файлы, в свою очередь, создаются или обрабатываются разными программными средствами, которые иногда требуют задания режимов работы многочисленными параметрами. Запоминать их и постоянно вводить вруч- ную тяжело, и такая работа вряд ли может быть признана эффективной. Для об- легчения процесса получения исполняемого файла используйте возможности, пре- доставляемые make-файлами. Make-файл для программиста — существенное облегчение в его работе. Тща- тельно разработав один раз make-файл для создания исполняемого файла своего приложения, вы впоследствии избавите себя от рутинной работы по формирова- нию необходимых для этого командных строк. Второй положительный эффект от использования make-файлов — упрощается работа автора по описанию процесса получения исполняемого модуля. Кстати, в роли автора можете оказаться и вы, когда разработаете свою программу и вместо длинного описания процесса ее сбор- ки предоставите пользователям make-файл, дополнив его необходимыми коммен- тариями. Информацию о правилах написания make-файлов можно найти среди прилагаемых к книге файлов в каталоге к главе 6. Make-файл для сборки прило- жения (см. листинг 16.4) представлен в листинге 16.6. Листинг 16.6. Пример make-файла для создания приложения рrg16_1 .ехе NAME = рrg16_1 ОВJ5 = $(NAME).оbj DЕF = $(NAME),dеf ТАSМDЕВUG=/zi LINКDЕВUG=/v IМРОRТ=imроrtЗ2 $(NAME).ЕХЕ: $(ОВJS) $ (DЕF) tliпkЗ2 /Тре /аа /с $(LINКDЕВUG) $(ОВJS), $ (NAME) , , $ (IMPORT) , $ (DЕF) . asm.оbj: tasm32 $(ТАSМDЕВUG) /ml $&.аsm, , , Поясним наиболее значимые элементы приведенного файла. Мы уже упоми- нали, что трансляция исходного файла производится программой tasm32.exe. При вызове ей передается ряд ключей (строки 1-6). Для формирования отладочной информации вы можете указывать значения макрооператоров ТАSМDЕВUG =/ζΐ (стро- ка 4) и LINKDEBUG = /v (строка 5). Кроме этих необязательных ключей в строке 10 присутствует обязательный ключ /mL, который требует, чтобы транслятор ассемб- лера различал строчные и прописные буквы в идентификаторах программы. Как вы смогли убедиться, это очень удобно при написании программ для Windows. Стро- ка 8 содержит вызов компоновщика tliпkЗ2.ехе. Описания других ключей для этой программы приведены в главе 6 и приложении В (http: //www. piter. com / download). При запуске программы make. exe не забывайте о нехитром, но полезном приеме с перенаправлением вывода экранных сообщений в файл с помощью символа «>»: MAKE.EXE -DDEBUG > р В файле р текущего каталога читайте диагностические сообщения о процессе построения приложения.