TWinSocketStream Write接口问题

我认为, 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);
就行了.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值