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.
程序原理:在内存中划出一块做变量交换。
(以上代码部分参考网络,经本人修改和实践)
- Delphi不同程序间变量的同享
- 同个staitc变量不同的内存地址 --- 不稳定的singleton模式
- delphi不同计算机程序间通信用TServerSocket实现
- 嵌入式C实现延时程序的不同变量的区别
- 导入不同jq版本同同一段jq程序的影响
- java如何写一个防止同账号不同ip登录的程序?
- 如何写一个防止同账号不同ip登录的程序?
- TensorFlow学习笔记(7)--实现卷积神经网络(同(5),不同的程序风格)
- 同一进程中的不同线程,他们读取到同个共享变量的值为什么会不一致
- 同功能不同的代码,差别呢?
- cache和TLB的同于不同
- CPP与C的不同与同
- C与CPP的同与不同
- 自定义事件实现不同窗体间的通讯Delphi篇
- 不同变量类型的不同输出格式
- 不同变量类型的不同输出格式
- 不同机器中不同变量的大小
- Delphi的程序单元
- ExecutionException异常
- spring与strut2的三种方式
- CSS+DIV+Javascript制作滑动门菜单技术
- [网站收集]Flash RIA
- 给网站添加favicon的技巧
- Delphi不同程序间变量的同享
- 获取文章的字数或则字符数
- TListView用法1(转)
- linux下的时间函数使用
- Posix多线程编程(5)—条件变量
- 传统Modem为何上限速率56Kbps
- MFC socket API使用经验(转载)
- oracle对BLOB类型数据的操作与性能问题
- 在面试一个游戏编程职位前,你需要知道的东西