Читаем Delphi. Трюки и эффекты полностью

function MapViewOfFile(hFileMappingObject: THandle;

dwDesiredAccess: DWORD;

dwFileOffsetHigh, dwFileOffsetLow,

dwNumberOfBytesToMap: DWORD ): Pointer;

Функция имеет следующие параметры.

• hFileMappingOb j ect – описатель созданного объекта файлового отображения.

• dwDesiredAccess – параметр доступа к полученным данным, в случае чтения и записи принимает значение FILE_MAP_WRITE.

• dwFileOf f setHigh, dwFileOf fsetLow – 64-битное смещение от начала файла.

• dwNumberOf BytesToMap – указывает, сколько байт будет отображено. Если этот аргумент имеет значение 0, то на область памяти будет отображен весь файл.

В результате успешного выполнения функции MapViewOfFile будет получен указатель (тип Pointer) на начальный адрес данных объекта. Указатель будет использоваться в дальнейшем для записи или чтения файла.

Следующей функцией, противоположной по производимым действиям функции MapViewOfFile, является UnMapViewOf File. Она отключает проецируемый файл от текущего процесса:

...

function UnMapViewOfFile(lpBaseAddress: Pointer): Boolean;

Функция принимает указатель, возвращаемый MapViewOfFile, и использует его для отмены проекции файла на адресное пространство процесса. В случае успешной выгрузки функция возвращает True, в противном случае – False.

И последняя функция, которую необходимо рассмотреть, – это CloseHandle. Она используется для закрытия дескриптора (многих системных объектов, а не только проекции файла).

...

function CloseHandle(hFileMapObj: THandle):Boolean;

Как видно из синтаксиса функции, она принимает описатель объекта файлового отображения, полученный в результате выполнения функции CreateFileMapping и освобождает его. Для правильного завершения работы с объектом файлового отображения сначала следует применить функцию UnMapViewOf File, а затем CloseHandle.

Сама проекция файла будет удалена только после того, как будут закрыты все дескрипторы во всех использующих эту проекцию процессах.

Для демонстрации работы проецируемых в память файлов создадим приложение, которое будет записывать в такой файл строку и спустя некоторое время считывать ее оттуда. Для этого нам понадобится стандартный TextBox, кнопка, метка и таймер. Программа будет работать следующим образом: строка, записанная в поле редактора, после нажатия кнопки помещается в проецируемый файл. Далее, спустя некоторое время (задается таймером), содержимое файла считывается и задается в качестве заголовка метки (рис. 8.2).

Рис. 8.2. Вид приложения, использующего проецируемый файл

В секцию описания переменных программы помещаем следующие объявления:

...

var

FormMappingFile: TFormMappingFile;

//Глобальные переменные

//Описатель объекта проецируемого файла

hFileMapObj:THandle;

//Указатель на начальный адрес данных

lpBaseAddress:PChar;

Далее рассмотрим, какие действия выполняются при загрузке формы. Создание проецируемого файла и его отображение в адресное пространство процесса выполняется в момент создания формы (листинг 8.7).

...

Листинг 8.7.

Создание формы приложения

procedure TMappingFile.FormCreate(Sender: TObject);

begin

//Создаем проецируемый файл с именем FileMemory

//и передаем полученный в результате описатель

//в глобальную переменную hFileMapObj

hFileMapObj := CreateFileMapping(MAXDWORD,Nil,PAGE_READWRITE,

0,4,’FileMemory’);

If (hFileMapObj = 0) Then

ShowMessage(\'Не могу создать проецируемый файл!\')

Else

//Подключаем файл к адресному пространству

//и получаем начальный адрес данных

lpBaseAddress := MapViewOfFile(hFileMapObj,FILE_MAP_WRITE,

0,0,0);

If lpBaseAddress = Nil Then

ShowMessage(\'Не могу подключить проецируемый файл!\');

end;

После инициализации файла его можно использовать. Приведем листинг обработчика, копирующего данные в проецируемый файл (листинг 8.8).

...
Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных