Программы Windows
Турбо Ассемблер можно использовать для создания прикладных программ Windows. Windows может работать либо в реальном режиме (на всех процессорах 8086) или в защищенном режиме (на процессоре 80286 и старше). Таким образом программа, написанная для Windows, может работать в защищенном режиме. С помощью директив CODESEG, DATASEG и UDATASEG следует аккуратно разделить код и данные и использовать директиву WARN PRO, чтобы отмечать любые проблемы с доступом, которые могут возникать во время ассемблирования. Наконец, в программах защищенного режима не следует пытаться устанавливать сегментные регистры в вычисленные значения параграфов сегмента. Значениями сегментов в защищенном режиме не являются адреса параграфов. Вместо этого используются дескрипторы, которые не имеют смысла в прикладной программе.
Кроме Турбо Ассемблера и Турбо отладчика для создания эффективных прикладных программ Windows требуются другие средства. В частности, вы должны располагать компилятором Borland C++ (либо Microsoft C 2.6 и Windows Software Dewelopment Kit). Прикладные программы Windows обычно требуют наличия утилиты-компилятора ресурсов (RC) этих пакетов. Должны быть также доступны стандартные библиотеки. В Windows также необходим компоновщик (например, TLINK) и утилита построения программ (например, MAKE).
Данное приложение содержит простейшие рекомендации по созданию прикладных программ Windows и динамически компонуемых библиотек (DLL). Более полное описание прикладных программ Windows можно найти в "Руководстве пользователя по С++" и соответствующей документации по Windows.
Замечания по динамически компонуемым библиотекам Windows
Динамически компонуемая библиотека (DLL) представляет собой группу процедур, которую вы можете вызывать из прикладных программ Windows. Библиотеки DLL расширяют интерфейс прикладных программ Windows.
Библиотеки DLL выполняют множество функций. Например, вы можете в DLL неинтерактивные программы DOS. С помощью DLL можно добавить новые средства работы с экраном.
На дистрибутивном диске Турбо Ассемблера можно найти пример программы с именем DLLPROG.ASM, который иллюстрирует DLL.
Для построения DLL можно использовать утилиту MAKE. Формирующий файл должен включать в себя все модули, которые должны компоноваться с DLL, например:
dllprog.dll: dllprog.obj dllprog.def TLINK dllprog,,,,dllprog RC dllprog.dll
dllprog.obj: dllprog.asm TASM dllprog
Данный процесс построения требует наличия следующего файла определений компоновщика DLLPROG.DEF:
LIBRARY DLLPROG EXETYPE WINDOWS CODE PRELOAD MOVEABLE DISCARDABLE ; CODE применяется к сегментам _TEXT или ; в классе CODE DATA PRELOAD MOVEABLE SINGLE ; DATE применяется ко всем сегментам в ; группе DGROUP и в классе DATA ; (должен быть SINGLE для всех DLL HEAPSIZE 0
Замечания по прикладным программам Windows
Прикладная программа Windows во многом аналогична DLL с единственной процедурой с именем WinMain. Windows вызывает WinMain для запуска процедуры. Прикладная программа имеет обычно стандартную структуру, которая позволяет ей взаимодействовать с графической операционной средой Windows.
Пример прикладной программы Windows можно найти в файле WINPROC.ASM на дистрибутивных дисках Турбо Ассемблера. В данном примере для вывода сообщения на экран используются функциональные возможности, обеспечиваемые предыдущим примером DLL.
Для построения прикладной программы Wiondows можно использовать утилиту MAKE. При этом в формирующем файле следует указать все модули, компонуемые с данной прикладной программой:
winproc.exe: winprog.obj winprog.def winprogg.res TLINK winprog,,,,winprog RC winprog.res
winproc.res:winproc.rc RC -r winproc.rc
winproc.obj: winprog.asm winprog.inc TASM winprog
Этот процесс построения требует использования следующего файла определений компоновщика WINPROG.DEF:
NAME WINPROG EXETYPE WINDOWS CODE MOVEABLE DISCARDABLE DATA MOVEABLE MULTIPLE DISCARDABLE STACKSIZE 5120 ; минимум для прикладных программ Windows
;----------------------------------------------------------- ; Определить импортируемые функции. (Это не обязательно, ес- ; ли вы выполняете компоновку с библиотекой импорта типа ; IMPORT.LIB или LIBW.LIB.) ;----------------------------------------------------------- IMPORTS DLLPROG.SetHello
1 2 3
8 8 8
|