请教高手 关于cport问题(100分)

  • 主题发起人 主题发起人 吴铄伟
  • 开始时间 开始时间

吴铄伟

Unregistered / Unconfirmed
GUEST, unregistred user!
我在网上查到一些OnRxChar()中,使用*.Write(变量,字符个数)发送数据可以,使用*.Read(变量,字符个数)接受的时候,在接收时候接收变量有Char,Pbyte,byte,string等变量接收.在使用*.Read中,我对这几个变量Char,Pbyte,byte,string没有弄清楚,请教高手帮助解释清楚.
 
就是准备一个缓冲区进行读写,需要告诉程序两个参数:这个缓冲区的起始位置(在那)和缓冲区的大小。
建议注意一下 delphi 中指针和变量的区别和关系。
 
不复杂嘛,你 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;
 
后退
顶部