Глобальная переменная «Application» не распознана - PullRequest
5 голосов
/ 30 октября 2008

Я работаю над большим проектом в Delphi 5. Сегодня, после объединения двух ветвей приложения, один из сотен модулей, UnitMain (как вы думаете, модуль основной формы), перестал распознавать глобальное приложение.

Это довольно странная проблема - я могу заставить программу компилироваться, определив Application: TApplication в UnitMain и установив его для Application из нашего файла проекта .dpr, но это приведет к нарушению доступа, что не большой сюрприз - приложение - это особенная вещь.

Я надеюсь, что кто-то сталкивался с такой же проблемой раньше или знает достаточно о внутренней работе 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; Вызовите ошибку «Требуется объект или тип класса». Ни у одного из других юнитов нет этой проблемы.

Ответы [ 3 ]

15 голосов
/ 30 октября 2008

Я думаю, что наиболее вероятно, что у вас есть два символа под названием «Приложение» в области видимости, и один из блока форм не является активным. Убедитесь, что блок Forms в списке использований указан после любого предыдущего блока, содержащего символ Application.

Но вам нужно предоставить больше информации. Точные сообщения об ошибках и т. Д.

9 голосов
/ 30 октября 2008

Я рад видеть, что все работает сейчас, но я добавлю, что еще один способ решения таких проблем, особенно если вы не хотите переставлять свои предложения использования, это префикс имени устройства к тому, что вы хотите использовать например,

Forms.Application.ProcessMessages;
2 голосов
/ 30 октября 2008

Какие единицы указаны в пункте использования в верхней части файла? Приложение поступает из блока «Формы».

например.

unit MyUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;
...