TBytes和TidBytes之间的Delphi XE4 Indy兼容性问题
今天我尝试在XE4中编译我的XE3项目.我面临的第一个问题是使用Indy的FTCPClient.Socket.ReadBytes()方法.
在它接受TBytes类型之前,现在它坚持使用TidBytes. 定义: 问题1: 问题2: 谢谢. 解决方法
TIdBytes是早期Indy 10版本中TBytes的简单别名的原因主要是为了与使用TBytes的SysUtils.TEncoding兼容. Indy的TIdTextEncoding类型曾经是D2009中SysUtils.TEncoding的简单别名,因此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,那么就不会有关于不兼容类型的编译器错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |