7

今日、XE3 プロジェクトを XE4 でコンパイルしようとしています。私が直面する最初の問題は、Indy の FTCPClient.Socket.ReadBytes() メソッドにあります。

TBytes タイプを受け入れる前は、TidBytes を主張するようになりました。

定義: TIdBytes = Byte の配列。TBytes、バイトの配列であるTArrayのようなジェネリックだと思います。

質問番号 1: コンパイラが「[dcc32 エラー] HistoricalStockData.pas(298): E2033 実変数と仮変数の型は同一でなければならない」と言って文句を言うのはなぜですか。私が見るように、それらはすでに同一です。

質問番号 2: Delphi の新しいバージョンごとにソース コードを変更する必要がありますか?

ありがとう。

4

3 に答える 3

3

次の 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;

そのため、両方が として定義されていても、TBytesTIdBytesは同じ型ではありませんarray of Byte

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

于 2013-05-02T15:17:40.390 に答える