【问题标题】:"Application" global variable not recognized“应用程序”全局变量无法识别
【发布时间】:2008-10-30 09:25:54
【问题描述】:

我在 Delphi 5 中从事一个大型项目。 今天,在将应用程序的两个分支合并在一起后,数百个单元之一 UnitMain(您猜是主窗体的单元)停止识别应用程序全局。

这是一个相当奇怪的问题 - 我可以通过在 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;调用,错误是“需要对象或类类型”。 其他单位都没有这个问题。

【问题讨论】:

    标签: delphi delphi-5


    【解决方案1】:

    我认为您很可能在范围内有两个称为“应用程序”的符号,而表单单元中的一个不是活动的。确保uses 列表中的Forms 单元位于任何包含Application 符号的先前单元之后。

    但是,您需要提供更多信息。确切的错误信息等。

    【讨论】:

    • 好吧,我该死的,这实际上就是它 - 将“Forms”更改为最后一个包含的单元会将正确的 Application var 带入范围。 Crystal Reports 单元可能是定义另一个应用程序的单元,因为这是我最近添加的少数东西之一。
    • 另一种选择是明确引用 Forms.Application
    【解决方案2】:

    我很高兴看到现在一切正常,但我将添加另一种解决此类问题的方法,特别是如果您不想重新排列您的使用子句,就是将单元名称添加到您想要使用的任何内容的前缀,例如。

    Forms.Application.ProcessMessages;
    

    【讨论】:

      【解决方案3】:

      文件顶部的uses 子句中有哪些单位?申请来自“表格”单元。

      例如。

      unit MyUnit;
      
      interface
      
      uses
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        • 2017-03-27
        • 1970-01-01
        • 1970-01-01
        • 2021-03-05
        相关资源
        最近更新 更多