0

ジェネリックを発見したばかりで(驚くべきことです!)、すぐに恋に落ちました... Delphi 2010(アップデート4および5がインストールされている)が次の[DCC Fatal Error] F2084 Internal Error: L1737コードを持っていると恐ろしいメッセージで失敗することがわかるまで:

// Global array of list
IDsList : Array [1..5] Of TDictionary<Int64, Int64>;

function MyProc;
var
   i : Integer;
   Enum : TDictionary<Int64, Int64>.TPairEnumerator;
begin
     // ...
     Enum := IDsList[i].GetEnumerator;
     while Enum.MoveNext do
     begin
          // ...
     end;
end;

正確には、この行をコメントしない限り、Delphi はコンパイルに失敗します。Enum := IDsList[i].GetEnumerator;

配列を使用するとコードが大幅に簡素化されます。この L1737 エラー メッセージを回避する方法はありますか?

PS。私は Delphi の初心者ではなく、ジェネリックだけです。

4

1 に答える 1

5

そのコードは、宣言のエラーMyProcが修正されると、私の Delphi 2010 でコンパイルされます。内部エラーにつながる実際のコードには、おそらく何か他のものがあります。

for/inいずれにせよ、ここでループを使用する方が理にかなっています。

var
  Pair: TPair<Int64, Int64>;
....
for Pair in IDsList[i] do
  DoSomething(Pair);

おそらく、それを行うと、内部エラーを回避できます。

に切り替えてfor/inも内部エラーが回避されない場合は、障害を示す完全なプログラムを提供する必要があります。できるだけ小さいサイズにカットしてみてください。これは、質問をしたり、バグレポートを送信したりするときに常に良い習慣です。

私の経験では、大量の内部エラーに溺れることなく本格的なジェネリック プログラミングを行いたい場合は、Delphi 2010 を超える必要があります。

于 2013-01-04T13:59:08.383 に答える