这是project1/2两个程序的code,在unit1里可以show出是windows 98,面在
unit2里却是空的呢!真烦!unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TShared = record
Keys:array [0..5] of String;
end;
PShared = ^TShared;
const
HOOK_MD5_FILENAME='2uwofj';
var
Form1: TForm1;
Shared: PShared;
lp:THandle;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Shared^.Keys[3]);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
lp:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False, HOOK_MD5_FILENAME);
if lp=0 then
begin
lp:=CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0,256, HOOK_MD5_FILENAME);
end;
if lp<>0 then
Shared:=MapViewOfFile(lp,FILE_MAP_ALL_ACCESS,0,0,0);
Shared^.Keys[0]:='windows xp';
Shared^.Keys[1]:='windows 2000';
Shared^.Keys[2]:='windows 7';
Shared^.Keys[3]:='windows 98';
Shared^.Keys[4]:='windows 2003';
Shared^.Keys[5]:='windows server 10';
end;end.unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TShared = record
Keys:array [0..5] of String;
end;
PShared =^TShared;
const
HOOK_MD5_FILENAME='2uwofj';
var
Form2: TForm2;
Shared: PShared;
lp:THandle;implementation{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
ShowMessage(Shared^.Keys[3]);
end;procedure TForm2.FormCreate(Sender: TObject);
begin
lp:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False, HOOK_MD5_FILENAME);
if lp<>0 then
Shared:=MapViewOfFile(lp,FILE_MAP_ALL_ACCESS,0,0,0);
end;end.
unit2里却是空的呢!真烦!unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TShared = record
Keys:array [0..5] of String;
end;
PShared = ^TShared;
const
HOOK_MD5_FILENAME='2uwofj';
var
Form1: TForm1;
Shared: PShared;
lp:THandle;
implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Shared^.Keys[3]);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
lp:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False, HOOK_MD5_FILENAME);
if lp=0 then
begin
lp:=CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0,256, HOOK_MD5_FILENAME);
end;
if lp<>0 then
Shared:=MapViewOfFile(lp,FILE_MAP_ALL_ACCESS,0,0,0);
Shared^.Keys[0]:='windows xp';
Shared^.Keys[1]:='windows 2000';
Shared^.Keys[2]:='windows 7';
Shared^.Keys[3]:='windows 98';
Shared^.Keys[4]:='windows 2003';
Shared^.Keys[5]:='windows server 10';
end;end.unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TShared = record
Keys:array [0..5] of String;
end;
PShared =^TShared;
const
HOOK_MD5_FILENAME='2uwofj';
var
Form2: TForm2;
Shared: PShared;
lp:THandle;implementation{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
ShowMessage(Shared^.Keys[3]);
end;procedure TForm2.FormCreate(Sender: TObject);
begin
lp:=OpenFileMapping(FILE_MAP_ALL_ACCESS,False, HOOK_MD5_FILENAME);
if lp<>0 then
Shared:=MapViewOfFile(lp,FILE_MAP_ALL_ACCESS,0,0,0);
end;end.
解决方案 »
- 关于Delphi(Pascal)访问数据库三层结构的问题
- ShellExecute 路径参数含有空格 接收ParamStr(1) 不完整
- 新手简单问题:
- 怎样用CHM帮助文件
- 为什么
- 求救!关于listbox的问题
- Socket传文件问题.刚学delphi 求高手指点
- 我是用mdi界面,我打开一个mdichild的form时,我不想让用户还能去其它界面上进行操作,怎么做啊,我把formstyle设为dialog好象也不行
- 我在使用ADO的时候出现了这样一个错误,请问这是什么错误!
- 密文算法推薦。因愛好在嘗試對數庫進行加密,密碼算法難求?進來看看衆位看官!!!
- 大家这种情况是怎么处理的?
- Delphi 十进制转十六进制函数怎么实现,不要IntTohex,返回的是string类型,要求返回的是Byte型?
而在程序2中,Keys:array [0..5] of String;指向了自身的内存区域(非共享区),它的内容当然不对了.
最简的方法,是将String改成短String,这样它就直接定义在Shared中了(共享区),程序就可以正常显示了
改上面二个Shared为:
TShared = record
Keys:array [0..5] of String[40]; //短String
end;