5

私は Delphi 5 で大規模なプロジェクトに取り組んでいます。今日、アプリの 2 つのブランチをマージした後、数百のユニットの 1 つである UnitMain (メイン フォームのユニットだと思いますか) が Application グローバルの認識を停止しました。

これはかなり奇妙な問題です。UnitMain で Application: TApplication を定義し、それを .dpr プロジェクト ファイルの Application に設定することで、プログラムをコンパイルできますが、アクセス違反が発生します。アプリケーションが特別なものであることに驚きです。

誰かが以前に同じ問題に直面したことがあるか、Delphi VCL の内部の仕組みを十分に知っていて、ここで私を助けてくれることを願っています。

unit UnitMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ComCtrls, StdCtrls, cxButtons, ExtCtrls, IniFiles, ShellAPI,
  LMDControl, LMDBaseControl, LMDBaseGraphicControl, LMDGraphicControl,
  LMDScrollText, cxControls, cxContainer, cxListBox, Psock, NMFtp, db, DBTables,
  FileCtrl, Configs, cxHint, DSetFunc, OleCtrls, DsInformation,
  InterAppComm, ActnList, ADODB, OleServer, CRAXDRT_TLB;

正確なエラーは、コンパイラがこのユニットのアプリケーションを認識しないことです。たとえば、Application.ProcessMessages の場合。呼び出し、エラーは「オブジェクトまたはクラス タイプが必要です」です。他のどのユニットにもこの問題はありません。

4

3 に答える 3

15

スコープ内に「アプリケーション」と呼ばれる 2 つのシンボルがあり、フォーム ユニットのシンボルがアクティブではない可能性が最も高いと思います。uses リスト内の Forms ユニットが、Application というシンボルを含む前のユニットの後にあることを確認してください。

ただし、より多くの情報を提供する必要があります。正確なエラーメッセージなど

于 2008-10-30T09:58:17.540 に答える
9

すべてが機能していることを嬉しく思いますが、そのような問題を解決する別の方法を追加します。特に uses 句を再配置したくない場合は、使用したいものにユニット名をプレフィックスすることです。

Forms.Application.ProcessMessages;
于 2008-10-30T11:56:38.800 に答える
2

ファイルの先頭にある uses 句にはどのような単位がありますか? アプリケーションは「フォーム」ユニットから来ます。

例えば。

unit MyUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;
于 2008-10-30T09:35:08.557 に答える