Delphi不同程序间变量的同享

来源:互联网 发布:c盘里的windows文件夹 编辑:程序博客网 时间:2024/05/18 02:51

我们都知道同一个程序间(包括引用DLL子窗口)可以使用全局变量来实现参数的交换,那么不同程序间又如何同享呢?

 

 

代码如下:

 

 

第一个程序

 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  hFileMapping:HWND;//指向内存区域的句柄
  SetString:pchar;//
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
    hFileMapping:=CreateFileMapping($FFFFFFFF,nil,Page_ReadWrite,0,11,'MapString');
 //$FFFFFFFF表示使用虚拟文件,注意两个工程中应该使用同一个唯一的名称MapString
    if hFileMapping=0 then
        raise Exception.Create('Error creating map file!');
        SetString:=MapViewOfFile(hFileMapping,File_Map_Write,0,0,11);
        strcopy(SetString,pchar(Edit1.Text));
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    UnMapViewOfFile(SetString);
    if hFileMapping<>0 then
        closehandle(hFileMapping);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
    hFileMapping:=CreateFileMapping($FFFFFFFF,nil,Page_ReadWrite,0,11,'MapString1');
 //$FFFFFFFF表示使用虚拟文件,注意两个工程中应该使用同一个唯一的名称MapString
    if hFileMapping=0 then
        raise Exception.Create('Error creating map file!');
        SetString:=MapViewOfFile(hFileMapping,File_Map_Write,0,0,11);
        strcopy(SetString,pchar(Edit1.Text));
end;

end.

 

另一个程序

 

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  GetString:pchar;
  hMapFileMaping:HWND;
implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
     hMapFileMaping:=CreateFileMapping($FFFFFFFF,nil,Page_ReadOnly,0,11,'MapString');
    //再次注意一定要使用唯一的名称(MapString)和第一个工程保持一致
     if hMapFileMaping=0 then
      raise Exception.Create('Error');
     GetString:=MapViewOfFile(hMapFileMaping,File_Map_Read,0,0,11);
     Edit1.Text:=String(GetString);
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
     hMapFileMaping:=CreateFileMapping($FFFFFFFF,nil,Page_ReadOnly,0,11,'MapString1');
    //再次注意一定要使用唯一的名称(MapString)和第一个工程保持一致
     if hMapFileMaping=0 then
      raise Exception.Create('Error');
     GetString:=MapViewOfFile(hMapFileMaping,File_Map_Read,0,0,11);
     Edit1.Text:=String(GetString);
end;

end.

 

程序原理:在内存中划出一块做变量交换。

(以上代码部分参考网络,经本人修改和实践)