IPB

> Утилита BINOBJ
Чат
Форум
Загрузка...
 

Язык:
Русский
English

Программа 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(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');{Открытие файла данных экрана}
  FileMode := 0;
 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 для построения двух модулей, которые содержат драйвер и файлы печати.

 
 К началу страницы 
 

Код для вставки: :: :: :: ГОСТ ::
Поделиться: //
 



-
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"