比如一个定义为:  
type PACKET_HEAD = record
dwCmdLen:integer;  
dwCmdID:integer;  
dwCmdStatus:integer; 
dwCmdSeq:integer; 
end;
type SMCG_LOGINSC = record
cUserName:array[0..15] of char;
cPassword:array[0..8] of char;
end;   
如何才能将PACKET_HEAD和SMCG_LOGINSC 的内容连续转换成Buf或Stream之类的进行一次发送发送,请各位高手帮助!急急急!!!谢谢

解决方案 »

  1.   

    用CopyMemory将那两个记录Copy到buffer中去就可以了。
      

  2.   

    var
     Loginhead : ^PACKET_HEAD;
     gwLogin : ^SMCG_LOGINSC;
     msg:pbyte;    CopyMemory(Msg,Loginhead,16);
        CopyMemory(Msg,gwLogin ,25);
    这样行吗?好像不行,帮忙给看看!100分
      

  3.   

    type PACKET_HEAD = packed  record
    dwCmdLen:integer;  
    dwCmdID:integer;  
    dwCmdStatus:integer; 
    dwCmdSeq:integer; 
    end;
    type SMCG_LOGINSC = packed  record
    cUserName:array[0..15] of char;
    cPassword:array[0..8] of char;
    end;  var
     Loginhead : PACKET_HEAD;
     gwLogin : SMCG_LOGINSC;
     msg:PChar;
     
    msg:=StrAlloc(sizeof(PACKET_HEAD)+sizeof(SMCG_LOGINSC));
    move(Loginhead,msg[0],sizeof(PACKET_HEAD));
    move(gwLogin,msg[sizeof(PACKET_HEAD)],sizeof(SMCG_LOGINSC)); 
      

  4.   

    我把上位朋友的 msg:Pchar; 修改为 msg:Pbyte;
    在把两个record放入存在问题,请赐教type PACKET_HEAD = packed  record
    dwCmdLen:integer;  
    dwCmdID:integer;  
    dwCmdStatus:integer; 
    dwCmdSeq:integer; 
    end;
    type SMCG_LOGINSC = packed  record
    cUserName:array[0..15] of char;
    cPassword:array[0..8] of char;
    end;  var
     Loginhead : PACKET_HEAD;
     gwLogin : SMCG_LOGINSC;
     msg:Pbyte;msg:=AllocMem(sizeof(PACKET_HEAD)+sizeof(SMCG_LOGINSC));
    move(Loginhead,msg,sizeof(PACKET_HEAD));move(gwLogin,msg[sizeof(PACKET_HEAD)],sizeof(SMCG_LOGINSC));
    ClientSocket1.Socket.SendBuf(Msg,41);
      

  5.   

    type PACKET_HEAD = packed  record
    dwCmdLen:integer;  
    dwCmdID:integer;  
    dwCmdStatus:integer; 
    dwCmdSeq:integer; 
    end;
    type SMCG_LOGINSC = packed  record
    cUserName:array[0..15] of char;
    cPassword:array[0..8] of char;
    end;  var
     Loginhead : PACKET_HEAD;
     gwLogin : SMCG_LOGINSC;
     msg:Pbyte;msg:=AllocMem(sizeof(PACKET_HEAD)+sizeof(SMCG_LOGINSC));
    move(Loginhead,msg^,sizeof(PACKET_HEAD));move(gwLogin,(msg+sizeof(PACKET_HEAD))^,sizeof(SMCG_LOGINSC));
    ClientSocket1.Socket.SendBuf(Msg^,41);
      

  6.   

    type PACKET_HEAD = packed  record
    dwCmdLen:integer;  
    dwCmdID:integer;  
    dwCmdStatus:integer; 
    dwCmdSeq:integer; 
    end;
    type SMCG_LOGINSC = packed  record
    cUserName:array[0..15] of char;
    cPassword:array[0..8] of char;
    end;  var
     Loginhead : PACKET_HEAD;
     gwLogin : SMCG_LOGINSC;
     msg:Pbyte;msg:=AllocMem(sizeof(PACKET_HEAD)+sizeof(SMCG_LOGINSC));
    move(Loginhead,msg^,sizeof(PACKET_HEAD));move(gwLogin,(msg+sizeof(PACKET_HEAD))^,sizeof(SMCG_LOGINSC));
    ClientSocket1.Socket.SendBuf(Msg^,41);
    -----------------------
    报错,烦请给解决一下,谢谢
    move(gwLogin,(msg+sizeof(PACKET_HEAD))^,sizeof(SMCG_LOGINSC));
    [Error] uMain.pas(115): Operator not applicable to this operand type
      

  7.   

    有那么复杂么,下面的方法不行么
    msg:string;
    msg:='';
    for i:=0 to 15 do
     begin
       msg:=msg+SMCG_LOGINSC.cUserName[i]
     end;
    for i:=0 to 8 do
     begin
     msg:=msg+SMCG_LOGINSC.cPassword[i]
     end;
     Tmpsocket.Socket.SendText(msg);以上可以了
    或者直接
     Tmpsocket.Socket.SendText(SMCG_LOGINSC.cUserName+SMCG_LOGINSC.cPassword)也应该可以。
      

  8.   

    字符串不行,另一端是VC6写的,是按字节截取的,这段发送string时,VC那端截取到的不对,Pbyte是对的,但是无法把两个record联接起来。谢谢,给解决一下。我很急,帮忙了
      

  9.   

    Writes Count bytes to the socket connection from the Buf parameter.function SendBuf(var Buf; Count: Integer): Integer;例:
    ClientSocket1.Socket.SendBuf(PACKET_HEAD1,SizeOF(PACKET_HEAD1));
      

  10.   

    风清阳写的很好啊,另外,你自己查看一下MOve的方法不就行了??
    分别填充,然后集合发送。
    另外,针对Char型的用StrpCopy.