2008-10-30 14 views
5

Trabajo en un proyecto grande en Delphi 5. Hoy, después de fusionar dos ramas de la aplicación, una de las cientos de unidades, UnitMain (la unidad principal del formulario, supongo) dejó de reconocer la aplicación global.Variable global "Aplicación" no reconocida

Esto es un problema bastante extraño - Pude hacer que el programa compilara definiendo Application: TApplication en UnitMain, y estableciéndolo en la Aplicación desde nuestro archivo de proyecto .dpr, pero eso lleva a una violación de acceso, que no es Es muy sorprendente que la aplicación sea lo especial.

Espero que alguien haya enfrentado el mismo problema antes, o sepa lo suficiente sobre el funcionamiento interno de Delphi VCL para ayudarme aquí.

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; 

El error exacto es que el compilador no reconoce la aplicación en esta unidad. Por ejemplo, para Application.ProcessMessages; llamada, el error es "Tipo de objeto o clase requerido". Ninguna de las otras unidades tiene este problema.

Respuesta

15

Creo que es más probable que tenga dos símbolos llamados "Aplicación" en su alcance, y el de la unidad de formularios no es el activo. Asegúrese de que la unidad de Formularios en la lista de usos venga después de cualquier unidad anterior que contenga un símbolo llamado Aplicación.

Pero necesita proporcionar más información. Los mensajes de error exactos, etc.

+0

Bueno, que me condenen, esto era en realidad - Cambio de "Formularios" que es la última unidad incluida trae la correcta aplicación var en el alcance. La unidad Crystal Reports podría ser la que defina otra aplicación, ya que es una de las pocas cosas que agregué recientemente. – anon6439

+2

Otra opción sería hacer referencia explícita a Forms.Application –

2

¿Qué unidades se encuentran en la cláusula uses en la parte superior del archivo? La aplicación proviene de la unidad "Formularios".

por ejemplo.

unit MyUnit; 

interface 

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

Me complace ver todo lo que funciona ahora, pero añadiré que otra forma de resolver estos problemas, especialmente si no desea reorganizar sus cláusulas de uso es prefijar el nombre de la unidad a lo que quieras usar, ej.

Forms.Application.ProcessMessages; 
Cuestiones relacionadas