close

Вход

Забыли?

вход по аккаунту

?

ЛР№4

код для вставкиСкачать
Федеральное агентство по образованию Рязанский Государственный Радиотехнический Университет
Отчёт по лабораторной работе № 4
Создание приложений Windows, осуществляющих обмен данными с помощью файлов, проецируемых в память.
Выполнили:
ст. гр. 842 Бакин С.С.
Золотов И.В.
Проверил:
Засорин С.В.
Рязань 2011
Код программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
HMapping:THandle;
PMapData:Pointer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
llInit: Boolean; //Логическая переменная
s:string;
begin
HMapping := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE,
0, sizeof(Edit1.Text), pchar('MMFSharedData'));
//Проверка наличия объекта с выбранным именем
llInit := (GetLastError() <> ERROR_ALREADY_EXISTS);
if (hMapping = 0) then
begin
MessageDlg('Can''t create file mapping',mtError,[mbOk],0);
Application.Terminate;
exit
end;
//Проецирование файла на адресное пространство
PMapData := MapViewOfFile(HMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
//Проверка на успешное проецирование
if PMapData = nil then
begin
CloseHandle(HMapping);
MessageDlg('Can''t view memory map',mtError,[mbOk],0);
Application.Terminate;
exit
end;
//Размещение содержимого EDIT в проецируемый файл
if (llInit) then
begin
s:=Edit1.Text;
StrPCopy(PMapData,s);
//Прекращаем проецирование окна
UnMapViewOfFile(PMapData);
//Пользователь не может создать еще один файл
Button1.Visible:=false;
Button2.Visible:=true;
Edit1.Text:='';
end
else
MessageDlg('Mapping Already Exists',mtError,[mbOk],0);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
OpMapping:THandle;
s:string;
begin
OpMapping:=OpenFileMapping(FILE_MAP_ALL_ACCESS, false,
pchar('MMFSharedData'));
if (OpMapping = 0) then
begin
MessageDlg('Can''t Open Mapping',mtError,[mbOk],0);
Application.Terminate;
exit;
end;
//Проецирование на адресное пространство процесса
PMapData := MapViewOfFile(OpMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
//Проверка на успешное проецирование
if PMapData = nil then
begin
CloseHandle(OpMapping);
MessageDlg('Can''t map view',mtError,[mbOk],0);
Application.Terminate;
exit
end;
//Помещаем содержимое файла в поле EDIT
s:=string(pchar(PMapData));
Edit1.text:=s;
UnmapViewOfFile(PMapData);
CloseHandle(OpMapping);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if HMapping <> 0 then
CloseHandle(HMapping);
Button2.Visible:=false;
Button1.Visible:=true
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
close;
end;
end.
Рис.1 Создание проекции данных в первом экземпляре
Рис.2 Открытие проекции данных во втором экземпляре
Документ
Категория
Рефераты
Просмотров
18
Размер файла
89 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа