1

Delphi2009を使用しています。プログラムは正常にコンパイルおよび実行されています。アクションリストを使用して、プログラムに組み込んでいますが、しばらく変更していません。

そのため、今日は、通常の方法でActionListに新しいアクションを追加するだけです。他に何もせずに、プログラムをビルドして実行すると、次のエラーが発生します。

[DCC致命的エラー]Userface.pas(1):F2092プログラムまたはユニット'Userface'は再帰的にそれ自体を使用します。

私はuses句を変更するために何もしていません。Userfaceユニットが自分自身を呼び出している、またはUserfaceを呼び出す別のユニットを呼び出しているインスタンスが見つかりません。再帰的な可能性のある呼び出しを、必要に応じて実装セクションに配置します。

保存せずにDelphiを終了し、再構築して実行すると、正常に実行されます。アクションリストに新しいアクションを再度追加しようとすると、致命的なエラーが再度発生します。

私は何が起こっているのか理解するのに途方に暮れています。これを回避する方法を理解するための助けをいただければ幸いです。


編集:Uweの答えの後、私はそれがまだ起こっていることを確認するために再確認しました。案の定、Uweへのコメントで説明したように、もう一度やり直しました。構築した後、それは再び起こりました。

...しかし、誤ってプロジェクトメニューで「ビルド」を選択できず、代わりに「コンパイル」を選択しました。うまくコンパイルされました。次に、ビルドを試みましたが、ビルドが正しく機能するようになりました。致命的なエラーはありません!私にとっては、すべてが再びうまくいくようです。

別のアクションを追加してからビルドしようとすると、エラーが再び発生します。しかし、コンパイルすれば、正常にビルドできます。少なくとも回避策があります。

これはある種の不具合であるに違いありません。何が起こったのかわかりません。誰かがこれが何であるか、なぜそれが起こっているのか知っていますか?


ファローアップ。マージャンが述べているように、それは他の状況で発生する可能性があり、そのうちの1つが私に起こりました。したがって、私の質問が尋ねるアクションの追加とは直接関係がない可能性があります。

それにもかかわらず、それは私にとってこれまでのところ比較的まれな出来事であり、小さな迷惑になっているだけです。Delphi 2010ですでに修正されている可能性があります。私の最終的な解決策は、64ビットまたはマルチプラットフォームのいずれかを追加した後、次にDelphi2011または12にアップグレードするときです。

4

3 に答える 3

2

コンポーネントを追加すると、uses句が自動的に変更される場合があります。これは、Delphi自体、またはModelMakerCodeExplorerなどのサードパーティプラグインのいずれかによって実行できます。[履歴]タブを使用して、変更をすばやく特定できます。

ソースがなければ、私ができると言うことはこれ以上ありません...

編集:私がプロジェクトをチェックすることを提案するあなたの追加情報を考慮に入れて

  1. 循環依存
  2. 検索パスのどこかに同じ名前のユニット

循環依存関係については、ModelMakerToolsの無料のユニット依存関係アナライザーを使用できます。そのページの下部にダウンロードリンクがあります。

于 2010-07-31T21:11:09.800 に答える
2

正しいソース(.dprパス!)をコンパイルし、uses部分が同じであることが絶対に確実な場合、Delphiは、非常に単純または未使用の場合、相互参照を排除できる可能性があります。

IOWは、AとBが相互にインポートする場合、コンパイラがパスを許可する可能性がありますが、一方が他方のシンボルを使用していません。シンボルの使用を開始するとすぐに(アクションを選択することで以前にデッドコードに到達できるようになるため)、相互参照の競合になります。

于 2010-07-31T23:15:51.787 に答える
1

リクエストに応じて、回答として私のコメント。

なぜそれが起こっているのかはわかりませんが、慰めになるのであれば、他の状況でも同様に起こるのを見てきました. 変更直後のビルドは失敗し、コンパイルしてからビルドが成功します。

これらの状況で時々役立つのは、コンパイル/ビルドの前に明示的にすべて保存することです。

IDE のタイミングとキャッシュに関係があるのではないかと思います。おそらく、コード インサイト、エラー レッド ライニングなどを有効にするコンパイル スレッドも関係しています。

于 2010-08-01T17:37:07.343 に答える