我遇到了与“ TBytes 和 TidBytes 之间的 Delphi XE4 Indy 兼容性问题”中提到的相同问题,即使用 Delphi XE4 编译时 TBytes(Delphi RTL) 和 TIdBytes(Indy) 数据类型之间的兼容性问题。我的问题的根源是代码不完全符合 Indy 的接口,并且一些函数在调用本机 Indy IO 过程时使用 TBytes,而不是 TIdBytes。
所以我想知道最好的解决办法是什么?
在我看来,有两种方法:
重构项目中的所有函数以使用 TIdBytes 而不是 TBytes。
实现 TBytesToTidBytes 转换过程(将 TBytes 转换为 TIdBytes)并在进行上述本机 Indy 调用之前调用该过程。
哪种方法更好/最好?您对我如何做到这一点有任何其他想法吗?
仅供参考:我尝试使用 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;