Tag60190=record   
    CmdID:Word;    
    bOnline:boolean;    
    end; 
我有一个这样的结构体,服务器返回给我一个这样的结构体.服务器的代码是C++,但服务器返回的时候,把bOnline付值为1或者零我用TcpClient.ReadBuffer(TagRoleonlineback,sizeof(TagRoleonlineback));接收服务器返回给我的结构体 .
当我接收完了之后,我怎么写条件判断语句呢?比如:if byte(TagRoleonlineback.bOnline)=1 then这样写不对啊 
该怎么写这个判断语句 

解决方案 »

  1.   

    直接用就行了
    if TagRoleonlineback.bOnline then
      

  2.   

    大哥,这样不行啊.我写了,不行啊,如果我要写个MESSAGEBOX弹出一个对话框,来看TagRoleonlineback.bOnline 这个值,该怎么写呢?
      

  3.   

    注意下 Boolean delphi 中相当于 Integer 的长度, 另外还有 WordBool(2byte), ByteBool
      

  4.   

    ShowMessage(BoolToStr(TagRoleonlineback.bOnline))
      

  5.   

    我也是这样写的呀,但对话框显示为空,是不是我服务器发过来的消息我没有接收到呢??TcpClient.ReadBuffer(TagRoleonlineback,sizeof(TagRoleonlineback));也就是说,这句没有接收服务器发过来的消息
      

  6.   

    对了,我这个boolean必须为一个字节
      

  7.   

    Tag60190=record   
        CmdID:Word;    
        bOnline:boolean;    
        end; 
    这个结构及其内部元素的字节长度,以及内部元素的排序顺序要与C语言的一致。
    且要注意是否紧密排列的影响
      

  8.   

    目前结构是一致的,我不知道DELPHI里boolean是多少字节,C++那边传过来的是一个字节.我不玩DELPHI,但这个项目要用DELPHI,各位大哥帮帮忙啊
      

  9.   

    你这样声明结构试试
    Tag60190=packed record
        CmdID:Word;
        bOnline:boolean;
        end;
      

  10.   

    var
    stredit2:string;
    stredit3:string;
    stredit1:string;
    begin
    if TcpClient.Connected =true then
        TcpClient.Disconnect;
        try
        begin
        TcpClient.Host :=Edit5.Text; // 连接服务器的IP跟端口
        Tcpclient.Port :=StrtoInt(Edit6.Text);
       with TcpClient do
       begin
         try
            Connect(3000);
          except
           TcpClient.Host :='';
            tcpclient.Port :=0;
           Application.MessageBox(pChar('踢人-->登陆失败!'),pChar('错误'),MB_OK+MB_ICONINFORMATION);
         end;
        end;
       Application.MessageBox(pChar('连接远程主机成功'),pChar('踢人'),MB_OK+MB_ICONINFORMATION);
        TagCheck.CmdID :=60001;
        TagCheck.wSize :=sizeof(TagCheck);
        TagCheck.dwSerial :=1000000000;
        TagCheck.szGmAccountName :='SuperGm';
        TagCheck.szGmPassword :='kungfu';
         TagRole.CmdID := 60175;
         TagRole.wSize :=sizeof(TagRole);
         TagRole.dwSerial :=1000000000;
         stredit2 :=Edit2.Text;
         stredit3 :=Edit3.Text;
         stredit1:=Edit1.Text;
         TagRole.dwBorough :=Crc(pchar(stredit2));
         TagRole.dwWorldNameCrc :=Crc(pchar(stredit3));
         FillChar(TagRole.szRoleName,SizeOf(TagRole.szRoleName),#0);
         Assert(Length(stredit1)<=SizeOf(TagRole.szRoleName));
         Move(PChar(stredit1)^,TagRole.szRoleName[0],Length(stredit1));
         TagRoleonline.CmdID :=60185;
         TagRoleonline.wSize :=sizeof(TagRole);
         TagRoleonline.dwSerial :=1000000000;
         TagRoleonline.dwBorough :=Crc(pchar(stredit2));
         TagRoleonline.dwWorldNameCrc :=Crc(pchar(stredit3));
         stredit1 :=Edit1.text;
         FillChar(TagRoleonline.szRoleName,SizeOf(TagRoleonline.szRoleName),#0);
         Assert(Length(stredit1)<=SizeOf(TagRoleonline.szRoleName));
         Move(PChar(stredit1)^,TagRoleonline.szRoleName[0],Length(stredit1));
         isize:=sizeof(TagCheck);
         TcpClient.WriteBuffer(isize,sizeof(DWORD),true);//向服务器发出验证用户名跟密码的指令
         TcpClient.WriteBuffer(TagCheck,sizeof(TagCheck),true);//向服务器发出验证用户名跟密码的指令
         sleep(3000);
         TcpClient.ReadBuffer(TagCheckback,sizeof(TagCheckback));//接受服务器返回的指令,验证是否通过
         Application.MessageBox(pchar(inttostr(TagCheckback.CmdID)),pChar('角色验证ID'),MB_OK);
         if TagCheckback.dwErrorCode=0 then
         begin
          isize :=sizeof(TagRoleonline);
          TcpClient.WriteBuffer(isize,sizeof(DWORD),true);//向服务器发出查询这个角色是否在线的指令
          TcpClient.WriteBuffer(TagRoleonline,sizeof(TagRoleonline),true);//向服务器发出查询这个角色是否在线的指令
          sleep(3000);
          TcpClient.ReadBuffer(TagRoleonlineback,sizeof(TagRoleonlineback));//接受服务器返回的指令,角色是否在线
          Application.MessageBox(pchar(inttostr(TagRoleonlineback.CmdID)),pChar('角色是否在线ID'),MB_OK);
          if TagRoleonlineback.bOnline then
          begin
              Application.MessageBox(pchar('说明已经接收到服务器发给我的角色是否在线的消息'),pChar('角色是否在线'),MB_OK);
             isize :=sizeof(TagRole);
             TcpClient.WriteBuffer(isize,sizeof(DWORD),true); //向服务器发出踢角色下线的指令
             TcpClient.WriteBuffer(TagRole,sizeof(TagRole),true); //向服务器发出踢角色下线的指令
             sleep(3000);
             TcpClient.ReadBuffer(TagRoleback,sizeof(TagRoleback));//接受服务器返回的指令,踢角色下线是否成功
             if  TagRoleback.dwErrorCode=0 then
               Application.MessageBox(pChar('该角色已被成功踢下线,请继续其它操作!'),pChar('踢人'),MB_OK+MB_ICONINFORMATION)
             else
               Application.MessageBox(pChar('该角色没有被成功踢下线,请继续其它操作!'),pChar('踢人'),MB_OK+MB_ICONINFORMATION);
           end;
          end;
           TcpClient.Disconnect;
          end;
          except   on e:exception do
          begin
          Application.MessageBox(pChar(e.message),pChar('踢人'),MB_OK+MB_ICONINFORMATION);
         TcpClient.Disconnect;
         end;
     end;
    end;