unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls;

type
  TForm1 = class(TForm)
    edVariable: TEdit;
    lbEnterValues: TLabel;
    bbOK: TBitBtn;
    bbExit: TBitBtn;
    lbShowValue: TLabel;
    lbVariable: TLabel;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure bbExitClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure bbOKClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
    Form1: TForm1;
//глобальные переменные
    hFileMapObj:THandle;//описатель FaleMapping
    lpBaseAddress:PChar;//"указатель" на начальный адрес данных
implementation
 
{$R *.DFM}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
//создадим FileMapping с именем MySharedValue
//и передадим его хэндл в глобальную переменную hFileMapObj
    hFileMapObj:=CreateFileMapping(MAXDWORD,Nil,PAGE_READWRITE,0,4,'MySharedValue');
    If (hFileMapObj=0) Then
//ошибочка вышла
        ShowMessage('Не могу создать FileMapping!')
    Else
//подключим FileMapping к адресному пространству
//и получим начальный адрес данных
        lpBaseAddress:=MapViewOfFile(hFileMapObj,FILE_MAP_WRITE,0,0,0);
    If lpBaseAddress=Nil Then
//ошибочка вышла
        ShowMessage('Не могу подключить FileMapping!');
end;
 
procedure TForm1.bbExitClick(Sender: TObject);
begin
//закроем форму
    Close;
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//кое-что надо сделать при закрытии формы:
//отключим FileMapping от адресного пространства
    UnMapViewOfFile(lpBaseAddress);
//освободим объект FileMapping
    CloseHandle(hFileMapObj);
//теперь форму можно закрыть
    Action:=caFree;
end;
 
procedure TForm1.bbOKClick(Sender: TObject);
begin
//поместим в адресное пространство свои данные
//переменная типа PChar имеет в конце завершающий #0, значит при считывании данных
//система сама сможет определить, где находится конец нужных данных
    StrPCopy(lpBaseAddress,edVariable.Text);
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//считаем нужные данные, обратившись по начальному адресу
//данных адресного пространства FileMapping
    lbVariable.Caption:=PChar(lpBaseAddress);
end;
 
end.


