2012-05-06 25 views
9

necesito para procesar un conjunto de archivos BMP utilizando una aplicación de consola, estoy utilizando la clase TBitmap, pero el código no se compila porque este errorTBitmap.Create que no trabajan en la aplicación de consola delphi

E2003 Undeclared identifier: 'Create' 

esta aplicación de ejemplo reproduce el problema

{$APPTYPE CONSOLE} 

{$R *.res} 

uses 
System.SysUtils, 
Vcl.Graphics, 
WinApi.Windows; 

procedure CreateBitMap; 
Var 
    Bmp : TBitmap; 
    Flag : DWORD; 
begin 
    Bmp:=TBitmap.Create; //this line produce the error of compilation 
    try 
    //do something 
    finally 
    Bmp.Free; 
    end; 
end; 

begin 
    try 
    CreateBitMap; 

    except 
    on E: Exception do 
     Writeln(E.ClassName, ': ', E.Message); 
    end; 
end. 

por qué este código no compila?

Respuesta

19

La cuestión está en el orden de su cláusula de usos, las unidades WinApi.Windows y Vcl.Graphics tienen un tipo llamado TBitmap, cuando el compilador encuentra una ambigua tipo resuelve el tipo utilizando la última unidad de la lista de usos donde esta presente en este caso utilizar el TBitmap de la unidad de Windows que apunta a la estructura BITMAP Winapi, para resolver este cambio el orden de las unidades de

uses 
System.SysUtils, 
WinApi.Windows, 
Vcl.Graphics; 

o puede declarar el tipo con el nombre cualificado completo al igual que

procedure CreateBitMap; 
Var 
    Bmp : Vcl.Graphics.TBitmap; 
    Flag : DWORD; 
begin 
    Bmp:=Vcl.Graphics.TBitmap.Create; 
    try 
    //do something 
    finally 
    Bmp.Free; 
    end; 
end; 
Cuestiones relacionadas