以下两个声明并不相同,尽管它们看起来是一样的。它们不是赋值兼容的,即使它们都基于array of string
.
type
TStringArrayOne = array of string;
TStringArrayTwo = array of string;
var
AVar1, AVar2: TStringArrayOne;
AVar3, AVar4: TStringArrayTwo;
begin
AVar1 := TStringArrayOne.Create('a', 'b', 'c'); // Compiles
AVar2 := TStringArrayTwo.Create('a', 'b', 'c'); // Won't compile
AVar3 := TStringArrayTwo.Create('a', 'b', 'c'); // Compiles
AVar4 := TStringArrayOne.Create('a', 'b', 'c'); // Won't compile
end;
所以TBytes
andTIdBytes
不是同一种类型,即使它们都被定义为 being array of Byte
。
关于您的问题2:这是一些第三方代码的常见问题。Indy 尤其以做出破坏向后兼容性的更改而闻名,因为他们决定在版本之间重新组织或重写事物。Indy 10 是对 Indy 9、IIRC 的重大更改,如果您更新到 Indy 的更高版本(即使没有同时更新 Delphi),几乎需要重写大多数使用它的代码。如果您不想处理这些更改,您可能需要考虑使用更稳定的 IP 通信包。有几个可用的也是免费的开源软件包。