指针赋值问题

zhuangbx220 2004-07-23 02:42:57
const
MEM_MAX=8200;
DATA_MAX=8192;

type MEM_DATA=record
hMainHwnd:HWND;
hData:Pointer;
end;
PMemData=^MEM_DATA;

var
PMem: PMemData;

function sendHook(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
var
memSam:TMemoryStream;
fn:string;
begin
if (PMem^.hMainHwnd<>0)and (len>400) then begin
if len>DATA_MAX then Len:=DATA_MAX;
GetMem(pMem^.hData,Len);
copymemory(PMem^.hData,@buf,Len);
memSam:=TMemoryStream.Create;
memSam.Write(PMem^.hData^,Len);
memSam.SaveToFile('e:\sendto_DATA00.DAT');//保存到硬盘中,用来查看
memSam.Free ;
end;
result:=Oldsend(s,Buf,len,flags);
end;



为什么我这样赋值数据不正确,都是 00 00
...全文
166 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yongxin800 2004-08-10
  • 打赏
  • 举报
回复
GetMem(pMem^.hData,Len*4);
zhuangbx220 2004-07-23
  • 打赏
  • 举报
回复
GetMem(pMem^.hData,Len);

这个不是已经分配内存空间了吗?
zhuangbx220 2004-07-23
  • 打赏
  • 举报
回复
已经初始化过了,在共享内存单元中


unit ShareMem;

interface

uses Windows, Messages, SysUtils;

const
MEM_MAX=8200;
DATA_MAX=8192;

type MEM_DATA=record
hMainHwnd:HWND;
hData:Pointer;
end;
PMemData=^MEM_DATA;

var
PMem: PMemData;
hMapFile:THandle;
procedure MapMem;
procedure UnmapMem;
function GetPointerofMem:Pointer;stdcall;

implementation

{映射内存,实现数据共享---Start}
procedure UnmapMem;
begin
if assigned(PMem)then
UnmapViewofFile(PMem);
PMem:=nil; //释放资源
end;

procedure MapMem;
const lpName='_ShareMem';
begin // 特殊内存映射句柄
hMapFile := OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, lpName);
if hMapFile=0 then
hMapFile := CreateFileMapping ($FFFFFFFF, nil, PAGE_READWRITE or SEC_COMMIT, 0,MEM_MAX,lpName); // 文件名
if hMapFile = 0 then
Raise Exception.Create('创建文件映射未成功')
else begin
PMem := MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, MEM_MAX);
end;
if PMem=nil then
begin
UnmapMem;
raise exception.Create('建立映射关系没有成功');
end
end;

function GetPointerofMem:Pointer;stdcall;
begin
result:=PMem;
end;

end.
aiirii 2004-07-23
  • 打赏
  • 举报
回复
PMem 沒有初始化!
PMem^.hData 也沒有分配內存空間
zhuangbx220 2004-07-23
  • 打赏
  • 举报
回复
buf是从socket的send函数传来的数据,len是数据长度

我memSam.Write(buf,Len);//可以保存到正确数据

memSam.Write(PMem^.hData^,Len);//就不行,保存的数据是空的,数据长度一样长

beyondtkl 2004-07-23
  • 打赏
  • 举报
回复
你看看你的参数 buf/len 是什么..
wychero 2004-07-23
  • 打赏
  • 举报
回复
关注.

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧