Самоучитель по Delphi 7 для профессионалов


Использование отображаемых файлов - часть 3


Третий и четвертый параметры также имеют тип DWORD. Это — смещение отображаемого участка относительно начала файла в байтах. В нашем случае эти параметры должны быть установлены в нуль, поскольку значение, которое мы даем пятому (последнему) параметру функции MapViewOfFile, также равно нулю.

Пятый (и последний) параметр функции MapViewOfFile, как и предыдущие параметры, имеет тип DWORD. Он используется для определения (в байтах) количества данных объекта файлового отображения, которые надо отобразить в процесс (сделать доступными для вас). Для достижения наших целей это значение должно быть установлено в нуль, что означает автоматическое отображение в процессе всех данных, выделенных перед этим функцией

CreateFileMapping.

Значение, возвращаемое функцией MapViewOfFile, имеет тип "указатель".

Если функция отработала успешно, то она вернет начальный адрес данных объекта файлового отображения.

Следующий фрагмент кода демонстрирует вызов функции MapViewOfFile:

var

hMappedFile: THandle; pSharedBuf: PChar;

 begin

hMappedFile :=

CreateFiieMapping(FHandle, nil, PAGE_READWRITE, 0, 0, 'SharedBlock');

 if {hMappedFile = 0) then

ShowMessage('Mapping error!')

else

begin

pSharedBuf :=

MapViewOfFiie(hMappedFile, FILE_MAP_ALL_ACCESS, 0, 0, 0) ;

if (pSharedBuf = nil) then

ShowMessage ('MapView error'); 

end; 

end;

После того как получен указатель pSharedBuf, вы можете работать со своим файлом как с обычной областью памяти, не заботясь о вводе, выводе, позиционировании и т. п. Все эти проблемы берет на себя файловая система. Последние две функции, имеющие отношение к объекту файлового отображения, называются UnMapViewOfFile И CloseHandle. Функция UnMapViewOfFile делает то, что подразумевает ее название. Она прекращает отображение в адресное пространство процесса того файла, который перед этим был отображен При помощи функции MapViewOfFile. Функция CloseHandle закрывает дескриптор объекта файлового отображения, возвращаемый функцией CreateFileMapping.

Функция UnMapViewOfFile должна вызываться перед функцией CloseHandle.

Функция UnMapViewOfFile передает единственный параметр типа указатель:

procedure TClientForm.FormDestroy(Sender: TObject); 

begin

UnMapViewOfFile(pSharedBuf};

CloseHandle(hFileMapObj);

 end;

Отображаемые файлы уже будут использоваться и в других главах этой книги. Не стоит удивляться, ведь это очень мощный инструмент: помимо возможности совместного доступа он позволяет заметно ускорить доступ к файлам, особенно большого размера.

 




Начало  Назад  Вперед



Книжный магазин