本帖最后由 changsn 于 2012-04-17 20:23:35 编辑

解决方案 »

  1.   

    rawtobytes糊涂了……
    一直都想摆脱这个函数……郁闷
      

  2.   

    buffer:TBytes;这个还未分内存,当然会有问题。需要用setlength设置一下长度
      

  3.   

    上面看错了,以为你没setlength,其实是你的CopyMemory用错了,因为TBytes其实是指错,所以你调CopyMemory时再@buffer取地址一次是不对的,改成这样:
    CopyMemory(Pointer(buffer),@login,SizeOf(login));其实用rawtobytes更简单,你上面的代码改成:
    procedure TMainForm.login;  
    var
      Login:TPRLogin;//记录
    begin
      StrPCopy(login.ID,Edit.Text);
      Login.flag:=PSKLogin;
      UDP.SendBuffer(Edit1.Text,StrToInt(Edit2.Text),rawtobytes(Login,SizeOf(TPRLogin)));
    end;
      

  4.   

    上面“指错”应该为“指针“,打错了,恶心的csdn居然不能编辑
      

  5.   

    为什么非要转为字节数组呢,直接发送多好的呀
      StrPCopy(login.ID,Edit.Text);
      Login.flag:=PSKLogin;
      UDP.SendBuffer(Edit1.Text,StrToInt(Edit2.Text),Login);
    这样就行了呢
      

  6.   

    UDP.SendBuffer(login,sizeof(TPRLogin));