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 

解决方案 »

  1.   

    你看看你的参数 buf/len 是什么..
      

  2.   

    buf是从socket的send函数传来的数据,len是数据长度我memSam.Write(buf,Len);//可以保存到正确数据memSam.Write(PMem^.hData^,Len);//就不行,保存的数据是空的,数据长度一样长
      

  3.   

    PMem 沒有初始化!
    PMem^.hData 也沒有分配內存空間
      

  4.   

    已经初始化过了,在共享内存单元中
    unit ShareMem;interfaceuses 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.
      

  5.   

    GetMem(pMem^.hData,Len);这个不是已经分配内存空间了吗?