问一个关于网络传递数据的自定义结构的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 flfqzrj
  • 开始时间 开始时间
F

flfqzrj

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了一个结构
Tainfo=Record
a:integer;
b:integer;
c:integer;
end;

当我另一客户端收到数据时
不能使用

BBB:=Tainfo(XXX)
xxx为接收的数据
BBB为Tainfo
 
我定义了一个结构
Tainfo=Record
a:integer;
b:integer;
c:integer;
end;

当我另一客户端收到数据时
不能使用

BBB:=Tainfo(XXX)
xxx为接收的数据
BBB为Tainfo
 
var pa,pb,pc:PInteger;

pa :=Pointer(@xxx);
Integer(pb) :=Integer(@xxx) +4;
Integer(pc) :=Integer(@xxx) +4
 
谢谢你的回答,但我的原意不是这样的,我只是给大家一个例子
Tainfo 我可能里面还有很多很多变量呢
我是初学者,PASIC没有C那样方便使用的指针,唉
 
呵呵,指针确实没有C里那么方便实用,所以我才会那么写,每转换一次指针都要浪费很多指令时间呢,很低效但安全的写法。
type pAAA=^TAAA;

var pr:pAAA;
pAAA :=Pointer(@xxx);
引用时如此pAAA^.a、pAAA^.b、pAAA^.c等等
 
试过了,不成功
 
我早就想过了
我想跟VC一样调试的时候看一下内存,唉,DELPHI没有VC那样调试自由
 
可以看内存呢,打开View->Debug Window->CPU
然后,想看那里就看那里,呵呵,也很方便的

pr :=pAAA(@xxx);,刚才写错了
其实用到指针,都是对内存操作,只要编译器能通过,并且传递的首地址正确,那么Dereference就应该能够正常工作.
 
做了个实验

var
stringtemp:string;
p1:pointer;
xxx:PAAA;
begin
stringtemp:='1234567890abcdefgh';
xxx:=PAAA(@stringtemp[1]);
self.Caption :=STRING(xxx^.a) ;
end;

得到的结果为23456789abcdefgh

如果xxx:=PAAA(@stringtemp[1]);改成
xxx:=PAAA(@stringtemp);

得到的结果为繁体的[卖]字
 
我知道哪里错了
 
TServer = record
Name: String;
end;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
Server: TServer;
begin
Server.Name:= 'aaaaaaaaa';
IdUDPClient1.SendBuffer('127.0.0.1', 8888, TBytes(Server));
end;

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TBytes;
ABinding: TIdSocketHandle);
begin
ShowMessage(TServer(AData).Name);
end;

用Indy的测试过没问题
 
自已已经解决了
虽然两位兄弟没能帮上忙
还是要谢谢你们的
 
后退
顶部