“アプリケーション”グローバル変数が認識されません

StackOverflow https://stackoverflow.com/questions/249655

  •  05-07-2019
  •  | 
  •  

質問

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

これはかなり奇妙な問題です。UnitMainでApplication:TApplicationを定義し、.dprプロジェクトファイルからApplicationに設定することで、プログラムをコンパイルできますが、それはアクセス違反につながります。 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の場合。呼び出し、エラーは「オブジェクトまたはクラスタイプが必要です」です。 他のどのユニットにもこの問題はありません。

役に立ちましたか?

解決

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

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

他のヒント

すべてが機能するようになったことを嬉しく思いますが、特にuses句を再配置したくない場合は、このような問題を解決する別の方法を追加します。 、例えば。

Forms.Application.ProcessMessages;

ファイルの上部のuses句に含まれる単位は何ですか?アプリケーションは「フォーム」から来ます。ユニット。

eg。

unit MyUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top