共享内存读出来的始终是乱码
附代码如下:
dll如下:
library exchdata;uses
SysUtils,
Classes,
dialogs,
windows;var
hMem: THandle;{$R *.res}function getGlobalMem(): Thandle;export;
begin
result := hMem;
end;exports
getGlobalMem;
begin
hMem := GlobalAlloc(gMem_Moveable and gMem_DDeshare, 4096);
if hMem = 0 then
showmessage('can''t alloc memory');
end.写共享内存的代码:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; function getGlobalMem(): Thandle; far;
external 'exchdata.dll';var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
hMem: Thandle;
pMem: Pchar;
begin
try
hMem := getGlobalMem();
except
showmessage('无法取得共享内存的指针');
exit;
end;
if hMem <> 0 then
begin
try
pMem := GlobalLock(hMem);
except
showmessage('共享内存加锁失败');
exit;
end;
end;
if pMem <> nil then
begin
StrPCopy(pMem, edit1.Text);
end;
GlobalUnlock(hMem);
end;
end.读共享内存的代码:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
StdCtrls, dialogs;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; function getGlobalMem(): Thandle; far;
external '..\exchdata.dll';var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
hMem: Thandle;
pMem: Pchar;
begin
try
hMem := getGlobalMem();
except
showmessage('无法取得共享内存句柄');
exit;
end;
if hMem <> 0 then
begin
try
pMem := GlobalLock(hMem);
except
showmessage('内存加锁失败');
exit;
end;
end;
if pMem <> nil then
begin
edit1.Text := strpas(PMem);
end;
GlobalUnlock(hMem);
end;end.恳请高手指点!谢谢,谢谢啦
附代码如下:
dll如下:
library exchdata;uses
SysUtils,
Classes,
dialogs,
windows;var
hMem: THandle;{$R *.res}function getGlobalMem(): Thandle;export;
begin
result := hMem;
end;exports
getGlobalMem;
begin
hMem := GlobalAlloc(gMem_Moveable and gMem_DDeshare, 4096);
if hMem = 0 then
showmessage('can''t alloc memory');
end.写共享内存的代码:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; function getGlobalMem(): Thandle; far;
external 'exchdata.dll';var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
hMem: Thandle;
pMem: Pchar;
begin
try
hMem := getGlobalMem();
except
showmessage('无法取得共享内存的指针');
exit;
end;
if hMem <> 0 then
begin
try
pMem := GlobalLock(hMem);
except
showmessage('共享内存加锁失败');
exit;
end;
end;
if pMem <> nil then
begin
StrPCopy(pMem, edit1.Text);
end;
GlobalUnlock(hMem);
end;
end.读共享内存的代码:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
StdCtrls, dialogs;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; function getGlobalMem(): Thandle; far;
external '..\exchdata.dll';var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
hMem: Thandle;
pMem: Pchar;
begin
try
hMem := getGlobalMem();
except
showmessage('无法取得共享内存句柄');
exit;
end;
if hMem <> 0 then
begin
try
pMem := GlobalLock(hMem);
except
showmessage('内存加锁失败');
exit;
end;
end;
if pMem <> nil then
begin
edit1.Text := strpas(PMem);
end;
GlobalUnlock(hMem);
end;end.恳请高手指点!谢谢,谢谢啦
请问我用的这种方式交换数据有什么缺点
段,然后在编译时设置该段为共享段(属性设为 wrs),即可。