用DLL共享内存,为什么对出来的值,不是写入的值(申请内存我用的是gmem_DDEShare),请高手帮忙
一个dll,一个写入端,一个接受端
library jhdll_dpr;
uses
SysUtils,
Classes,
forms,
windows;
var
hMem:THandle;
{$R *.res}
function GetGlobalMem:THandle;export;
begin
result:=hMem;
end;
exports GetGlobalMem;
begin
hMem:=GlobalAlloc(GMEM_ZEROINIT and gmem_MOVEABLE and gmem_DDEShare,512);
if hmem=0 then application.MessageBox('提示','无法申请内存空间') ;
end.
写入端:
var
hMem: THandle;
pMem: PChar;
begin
hMem:=0;
hMem := GetGlobalMem; {获得全局内存块的句柄}
if hMem <> 0 then
begin
showmessage(inttostr(hmem)) ;
pMem := GlobalLock(hMem); {加锁全局内存块}
if pMem <> nil then
begin
StrPCopy(pMem,edit1.text); {向全局内存块写入数据}
GlobalUnlock(hMem); {解锁全局内存块}
end
else
MessageDlg('Couldnot Lock memory block',mtWarning,[mbOK],0);
end;
end;
读出端程序:
var
hMem: THandle;
pMem: PChar;
hMem := GetGlobalMem; {获得全局内存块的句柄}
if hMem <> 0 then
begin
pMem := pchar(GlobalLock(hMem)); {加锁全局内存块}
if pMem <> nil then
begin
edit3.text := strpas(pMem); {从全局内存块读取数据}
GlobalUnlock(hMem); {解锁全局内存块}
end
else
MessageDlg('Couldnot Lock memory block',mtWarning,[mbOK],0);
end;
问题点数:0、回复次数:1Top
1 楼aiirii(ari-http://spaces.msn.com/members/aiirii/)回复于 2003-11-01 17:11:21 得分 0
好象你讀寫對應的全局內存其實在不同的內存空間, 一般要用共享全局內存變量來實現交換;
{获得全局内存块的句柄} 并不是對所有程序通用的, 雖然同個dll是共享內存空間的!!Top




