我是个delphi菜鸟,请问大家个问题,如何将pointer的内容转成array of char在网络上传输!我做了个小程序试验下面这样就正常:
procedure TActiveFormX.DSCNSender1DSTransmitters1SendBuffer(Sender: TObject;
  Buffer: Pointer; Count, FrameID: Integer);var ChatDataPackage:TChatDataPackage;
    _ToIP,_SendMsg,_ToAccount:string;
    _ToPORT:Integer;
    tempItem:TListItem;
    stream :TMemoryStream;
    ArrChar : array[0..6000] of char;
begin
  DSCNReceiver2.WriteBuffer(Buffer,Count) ;
end;
这样就不正常:
procedure TActiveFormX.DSCNSender1DSTransmitters1SendBuffer(Sender: TObject;
  Buffer: Pointer; Count, FrameID: Integer);var ChatDataPackage:TChatDataPackage;
    _ToIP,_SendMsg,_ToAccount:string;
    _ToPORT:Integer;
    tempItem:TListItem;
    stream :TMemoryStream;
    ArrChar : array[0..6000] of char;
begin  stream :=  TMemoryStream.Create;
  stream.WriteBuffer(Buffer,count);
  stream.Position := 0;
  DSCNReceiver2.WriteBuffer(stream.Memory,stream.Size) ;
  stream.Free;
end;
我不大懂delphi,但我的目的是想把Pointer所指向的内容放TMemoryStream中,利用stream.readBuffer方法,将流中的内容读到ArrChar : array[0..6000] of char中通过网络传输到另一端,另一端接收后,把ArrChar : array[0..6000] of char写到流中,不知道这样的思路对不对,请高手指教。本来通过Indy组件可以不转成array of char,但我想在包中再加点东西后再发,请大家不吝赐教,菜鸟定当重分相谢!!!

解决方案 »

  1.   

    DSCNReceiver2.WriteBuffer(stream.Memory,stream.Size) ;
    替换成
    DSCNReceiver2.WriteBuffer(stream.Memory^,stream.Size) ; 
      

  2.   

    >>本来通过Indy组件可以不转成array of char,但我想在包中再加点东西后再发,请大家不吝赐教,菜鸟定当重分相谢!!!你定义一个结构体,然后发送这个结构体
    myrec = package record
      id:integer;
      name:string[100];
      ......
      ArrChar : array[0..6000] of char;  
    end;
    procedure TActiveFormX.DSCNSender1DSTransmitters1SendBuffer(Sender: TObject; 
      Buffer: Pointer; Count, FrameID: Integer); var 
      m_myRec:myrec;
    begin 
      ....对m_myRec的赋值操作
      DSCNReceiver2.WriteBuffer(m_myRec,sizeof(myrec)) ; 
      stream.Free; 
    end;
      

  3.   

    不用转的
    既然来晚了
    就没什么好说的了
    这样也行
    WriteBuffer(pchar(buf)[0],Size) ;