今天我尝试在XE4中编译我的XE3项目.我面临的第一个问题是使用Indy的FTCPClient.Socket.ReadBytes()方法.
在它接受TBytes类型之前,现在它坚持使用TidBytes.
定义:TIdBytes =字节数组; TBytes,我不确定我猜它是泛型类似于TArray的字节数组.
问题1:编译器为什么抱怨'[dcc32错误] HistoricalStockData.pas(298):E2033实际和正式var参数的类型必须相同'.我认为它们已经相同了.
问题2:我应该用每个新的delphi版本修改我的源代码吗?
谢谢.
原因TIdBytes是TBytes早期的Indy 10版本中的一个简单别名主要是为了兼容SysUtils.TEncoding,使用TBytes.Indy的TIdTextEncoding类型曾经是SysUtils.TEncodingD2009 +中的一个简单别名,所以TIdBytes需要一个简单的别名TBytes来匹配.
然而,TBytes在XE3中为Indy造成了相当大的麻烦,主要是因为Generics的RTTI问题(在最近的Delphi版本中TBytes是一个简单的别名TArray<Byte>).因此,Indy 10.6重新设计TIdTextEncoding为完全不再依赖SysUtils.TEncoding(还有其他原因),然后允许TIdBytes更改为自己的数组类型,以避免XE3问题向前发展.
在另一方面,你传递一个TBytes,其中一个TIdBytes是意料之中的,所以这是你的一部分坏的编程摆在首位不遵守Indy的定义的接口.所有Indy 10的基于字节的操作,包括ReadBytes(),始终TIdBytes只能运行.TIdBytes静默映射到的事实是TBytes您不应该在代码中依赖的实现细节.Indy 10期望TIdBytes,所以使用TIdBytes,那么你就不会有关于不兼容类型的编译器错误.
| 归档时间: |
|
| 查看次数: |
7623 次 |
| 最近记录: |