次の 2 つの宣言は同じように見えますが、同じではありません。どちらも に基づいていますが、割り当て互換ではありません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
とTIdBytes
は同じ型ではありませんarray of Byte
。
質問 2 に関して: これは、一部のサードパーティ コードに共通の問題です。特に Indy は、バージョン間で再編成または書き直しを決定するため、下位互換性を損なう変更を行うことで知られています。Indy 10 は Indy 9、IIRC からの大きな変更点であり、Indy の新しいバージョンに更新した場合 (同時に Delphi を更新しなくても)、それを使用するほとんどのコードを書き直す必要がありました。これらの変更に対処したくない場合は、より安定した IP 通信パッケージの使用を検討することをお勧めします。無料のオープン ソース パッケージもいくつかあります。