TWinSocketStream接口问题

作者在 2007-07-06 19:14:00 发布以下内容
 我认为, Delphi VCL提供的TWinSocketStream类接口Write的参数列表定义有问题.

本人在使用该接口向Socket发送数据时, 发现发送的数据不正确, 请看下面的描述性代码部分:

var
   FSocketStream: TWinSocketStream;
   DataBuf: TByteDynArray;
begin
   SetLength (DataBuf, DataSize);
   try
      // Assume FSockSteam bound with somewhat sock before.
      DataBuf[0] := $01;
      DataBuf[1] := $02;
      DataBuf[2] := $03;
      DataBuf[3] := $04;
      FSockStream.Write (DataBuf, DataSize);
   finally
      SetLength (DataBuf, 0);
   end;
end;
"FSockStream.Write (DataBuf, DataSize)"这里会有问题, 实际上没有将我设置的数据发出. 但如果把上段代码中
var
   FSocketStream: TWinSocketStream;
   DataBuf: TByteDynArray;
......
修改成
var
   FSocketStream: TWinSocketStream;
   DataBuf: array [0..255] of Byte;
......
情况就大不一样了!
后来查看了VCL的相关文档, 发现这个Write()接口参数的是被定义成const Buf 无类型参数, 根据VCL文档中所说, 无类型参数传入时编译器会启动匹配数据类型, 而前面代码中DataBuf定义成动态数组显然不能被其识别, 既然如此何不将const Buf定义成PChar, PByte, 直接发送字节流, 岂不是更好更直观吗?
要知道为了找到这个问题, 我可是花了不少工夫. 最后的解决办法就是, 不用修改DataBuf的定义, 只将
FSockStream.Write (DataBuf, DataSize);
改为,
FSockStream.Write (DataBuf[0], DataSize);
就行了.
软件技术资料摘录 | 阅读 1679 次
文章评论,共0条
游客请输入验证码