delphi – 我应该如何调整我的代码以实现TBytes和TIdBytes之间的
发布时间:2020-12-15 09:30:16 所属栏目:大数据 来源:网络整理
导读:我遇到了与“ Delphi XE4 Indy compatibility issue between TBytes and TidBytes”中提到的相同的问题,即在使用Delphi XE4进行编译时TBytes(Delphi RTL)和TIdBytes(Indy)数据类型之间的兼容性问题.我的问题的根源是代码不完全符合Indy的接口,并且一些函数在
我遇到了与“
Delphi XE4 Indy compatibility issue between TBytes and TidBytes”中提到的相同的问题,即在使用Delphi XE4进行编译时TBytes(Delphi RTL)和TIdBytes(Indy)数据类型之间的兼容性问题.我的问题的根源是代码不完全符合Indy的接口,并且一些函数在调用本机Indy IO过程时使用TBytes而不是TIdBytes.
所以我想知道最好的解决方案是什么? 我认为有两种方法: >重构项目中的所有功能以使用TIdBytes而不是TBytes. 哪种方法更好/最好?您对我如何做到这一点有什么其他想法吗? 仅供参考:我尝试使用XE4配置的项目可在sourceforge上在线获取:http://sourceforge.net/projects/indy10clieservr/?source=directory 建议的转换程序应该是这样的: procedure TBytesToTIdBytes(const Input:TBytes,var Output: TIdBytes) var i,L : Integer; allocate : Boolean; begin L := Length(Input); if(Length(Output) <> L) then begin SetLength(Output,L); end; if(L > 0) then move(Pointer(Input)^,Pointer(Output)^,L); end; 解决方法
TBytes和TIdBytes都是作为动态数组实现的,它们只是以不同方式声明. “政治上正确”的解决方案是制作字节的副本.但这会浪费大型阵列的内存.更简单的解决方案是使用类型转换,以便您可以利用数组的内部引用计数,例如:
type PIdBytes = ^TIdBytes; var B1: TBytes; B2: TIdBytes; begin B1 := ...; B2 := PIdBytes(@B1)^; end; 或者干脆: var B1: TBytes; B2: TIdBytes; begin B1 := ...; B2 := TIdBytes(B1); end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |