|
|||||||||||||||||||
|
Утилита BinOBJПрограмма BINOBJ.EXE предназначена для конвертирования любого файла в .OBJ файл, таким образом, что он может компоноваться в программу Турбо Паскаля как "процедура". Это весьма полезно, если у Вас имеется файл двоичных даннных, который должен находиться в сегменте кода или если размер файла данных слишком большой для формирования массива типированных констант. Например, Вы можете использовать BINOBJ с модулем GRAPH для связывания графического устройства или файлов печати с Вашим .EXE файлом. В этом случае, для использования Вашей графической программы, Вам нужно иметь только .EXE файл. (см. пример GRLINK.PAS на дистрибутивном диске N2). BINOBJ принимает три параметра: BINOBJ <источник[.BIN]> <место назначения [.OBJ]> <общее имя> где источник - двоичный файл, подлежащий преобразованию, место назначения - имя формируемого .OBJ файла, и общее имя - имя процедуры, которая будет обьявлена в Вашей программе. В следующем примере, процедура Showscreen принимает указатель в качестве параметра и передает 4000 байтов данных в память экрана. Файл MENU.DTA содержит образ главного меню экрана (80*25*2=4000 байтов). Ниже приводится простая (без проверок на ошибки) версия программы MYPROGRAM.PAS: program MyProg; procedure ShowScreen(var ScreenData : pointer; {Отображение полного экрана, без проверки на ошибки!} var ScreenSegment: word; begin if (Lo(LastMode) = 7) then ( Mono? ) ScreenSegment := $B000 else ScreenSegment := $B800; Move(ScreenData^, { По указателю } Ptr(ScreenSegment,0)^ { В память экрана } 4000); ( 80 * 25 * 2 ) end; var MenuP : pointer; MenuF : file; begin Assign(MenuF,'MENU.DTA'); {Открытие файла данных экрана} Reset(MenuF, 1); GetMem(MenuP, 4000); { Размещение буфера в куче} BlokRead(MenuF, MenuP^,4000); {Чтение данных экрана} Close(MenuF); ShowScreen(MenuP); {Отображение экрана} end. Файл данных экрана MENU.DTA открывается и считывается в буфер кучи. Оба файла MYPROG.EXE и MENU.DTA должены присуствовать в момент выполнения программы. Вы можете использовать BINOBJ для пребразования MENU.DTA в .OBJ файл (MENUDTA.OBJ) и сообщить программе о необходимости связи этого файла с процедурой MenuData. Затем Вы можете об'явить внешней процедуру MenuData, которая фактически будет содержать экранные данные. Скомпоновав .OBJ файл с помощью директивы компилятора $L, MenuData будет длинной 4000 байтов и будет содержать данные Вашего экрана. Прежде всего, вызовите BINOBJ для обработки MENU.DTA. binobj MENU.DTA MENUDTA MenuData Первый параметр MENU.DTA указывает на обычный файл данных экрана, второй - MENUDTA - это имя создаваемого .OBJ файла (т.к. не указано расширение, будет добавлено .OBJ). Последней параметр - MenuData - имя внешней процедуры, которая будет об'явлена в Вашей программе. Теперь, поскольку Вы конвертировали MENU.DTA в .OBJ файл, новая версия программы MYPROG.PAS будет выглядеть следующим образом: program MyProg; procedure ScowScreen(ScreenData : pointer); {Отображение полного экрана, без проверок на ошибки} var ScreenSegment: word; begin if (Lo(LastMode) = 7) then ( Mono? ) ScreenSegment :=$B000 else ScreenSegment :=$B800; Move(ScreenData^, {По умолчанию} Ptr(ScreenSegment,0)^ {В память экрана} 4000); ( 80 * 25 * 2 ) end; procedure MenuData; external; ($L MENUDTA.OBJ) begin ShowScreen(&MenuData); {Отображение экрана} end. Заметьте, что процедура ShowScreen не изменилась, и что адрес Вашей процедуры передается с употреблением оператора @. Преимущество связывания данных экрана с .EXE файлом очевидно. Вам нет необходимости осуществлять какую-либо поддержку по оперированию с файлами для использования основной программы. Кроме того, у Вас есть преимущество, заключающееся в возможности обращения к экрану по имени (MenuData). Недостатки: - Каждый раз при модификации файла информации экрана, Вы должны заново преобразовывать ее в .OBJ файл и перекомпилировать программу MYPROG. - Вы должны иметь отдельный .OBJ файл (и внешнюю процедуру) для каждого экранного меню, которое Вы хотите отобразить. Программа BINOBJ особенно полезна при стабильности двоичного файла. Одна из простых графических программ (находится на дистрибутивной дискете N2) GRLINK.PAS использует BINOBJ для построения двух модулей, которые содержат драйвер и файлы печати. |
|
Web дизайн: Бурлаков Михаил
Web программирование: Бурлаков Михаил