

| стрелялки |
| спорт |
| драки |
| стратегии |
| гонки |
| логические |
| азартные |
| аркады |
| эротические |
| фильмы онлайн |
| Метод CreateFileMapping |
|
Метод CreateFileMapping() лишь создал файловый объект. Для отображения файла в адресное пространство нам понадобится метод: 1ШЯла5)<5) /Ш/7 function MapViewOfFile(hMapObject : THandle; Access, OffsetHigh, OffsetLow, Map : Cardinal) : Pointer; Здесь параметр hMapObject - дескриптор объекта отображения, возвращенный методом CreateFileMapping() . Параметр Access определяет тип доступа к представлению. Различают три основных режима: • FILE_MAP_WRITE или FILE_MAP_ALL_ACCESS - доступ для чтения и записи. • FILE_MAP_READ - доступ для чтения. • FILE_MAP_COPY - доступ для копирования. Параметры OffsetHigh и OffsetLow задают соответственно старшие и младшие 32 бита смещения внутри файла отображения. Параметр Map - количество байт файла, которые должны быть отображены. Если параметр установлен в 0, то отображается весь файл. В случае успешного завершения метод возвратит указатель на самый первый байт спроецированного файла (базовый адрес объекта отображения). Применим знания на практике. Начните новый проект. В секции определения переменных главной формы (перед началом раздела implementation) объявите переменные hMFile и pMFile и константу mFileName: var Forml : TForml; hMFile : THandle; pMFile : pointer; const mFileName='FileMappingDemo'; //имя объекта отображения Сохраните приложение под именем FMapping.dpr. Перейдите к головному модулю проекта .dpr и внесите в него изменения так, как предложено в следующем листинге: program FMapping; uses Forms, Windows, Unitl in 'Unitl.pas' {Forml}; {$R *.res} begin Application.Initialize; {Для того чтобы процессы смогли разделить объект файлового отображения, они должны передавать одинаковые параметры в методы CreateFileMapping() и MapViewOfFile()} hmFile:=CreateFileMapping($FFFFFFFF, nil, Page_ReadWrite, 0, 256, mFileName); {размер объекта отображения - всего-навсего 256 байт, он доступен для чтения и записи} Сразу после инициализации приложения мы пытаемся создать объект отображения. Если эта операция завершилась неудачно, прекращаем работу программы, вызвав метод Halt(). Если же дескриптор объекта отображения получен, то проецируем его в виртуальное адресное пространство нашего процесса. Для этого вызываем функцию CreateFileMapping() и получаем указатель на начальную область памяти pMFile. Затем создаем главную форму и запускаем приложение на выполнение. |
