TWinSocketStream Write接口问题

王朝system·作者佚名  2006-04-16
窄屏简体版  字體: |||超大  

我认为, 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);

就行了.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航