吴 吴铄伟 Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-06 #1 我在网上查到一些OnRxChar()中,使用*.Write(变量,字符个数)发送数据可以,使用*.Read(变量,字符个数)接受的时候,在接收时候接收变量有Char,Pbyte,byte,string等变量接收.在使用*.Read中,我对这几个变量Char,Pbyte,byte,string没有弄清楚,请教高手帮助解释清楚.
我在网上查到一些OnRxChar()中,使用*.Write(变量,字符个数)发送数据可以,使用*.Read(变量,字符个数)接受的时候,在接收时候接收变量有Char,Pbyte,byte,string等变量接收.在使用*.Read中,我对这几个变量Char,Pbyte,byte,string没有弄清楚,请教高手帮助解释清楚.
L LSUPER Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-09 #2 就是准备一个缓冲区进行读写,需要告诉程序两个参数:这个缓冲区的起始位置(在那)和缓冲区的大小。 建议注意一下 delphi 中指针和变量的区别和关系。
S SupermanTm Unregistered / Unconfirmed GUEST, unregistred user! 2008-03-10 #3 不复杂嘛,你 Write,对于发送程序而言,你的数据是什么根本不重要,反正它照你给出的指针和长度去发送就是了,所以通常用这样的形式: procedure TCommObj.Write(Count: Integer; var Data); Data 是无类型参数,与任何类型都兼容,事实上这个过程接收的是指针(变量参数传递的是指针) 至于 Read,就不一样了,因为你的目标参数形式是需要考虑的,当然,也可以让你自己去做的,譬如用一个这样的形式: function TCommObj.Read(MaxBufferLen: Integer; pBuffer: Pointer): Integer; 调用时先自己给 pBuffer 分配好足够的内存,然后把指针给它,它把数据放上去,然后你自己在用类型替换,如: type TMyRec = packed record V1: WORD; V2: Byte; V3: array [0..7] of Char; end; PMyRec = ^TMyRec; procedure TForm1.CommRxChar(Sender: TObject); var pBuf: Pointer; xLen: Integer; X: Integer; begin GetMem(pBuf, 2048); xLen:= Comm.Read(2048, pBuf); with PMyRec(pBuf)^do begin .... end; end;
不复杂嘛,你 Write,对于发送程序而言,你的数据是什么根本不重要,反正它照你给出的指针和长度去发送就是了,所以通常用这样的形式: procedure TCommObj.Write(Count: Integer; var Data); Data 是无类型参数,与任何类型都兼容,事实上这个过程接收的是指针(变量参数传递的是指针) 至于 Read,就不一样了,因为你的目标参数形式是需要考虑的,当然,也可以让你自己去做的,譬如用一个这样的形式: function TCommObj.Read(MaxBufferLen: Integer; pBuffer: Pointer): Integer; 调用时先自己给 pBuffer 分配好足够的内存,然后把指针给它,它把数据放上去,然后你自己在用类型替换,如: type TMyRec = packed record V1: WORD; V2: Byte; V3: array [0..7] of Char; end; PMyRec = ^TMyRec; procedure TForm1.CommRxChar(Sender: TObject); var pBuf: Pointer; xLen: Integer; X: Integer; begin GetMem(pBuf, 2048); xLen:= Comm.Read(2048, pBuf); with PMyRec(pBuf)^do begin .... end; end;