11

コンソールアプリケーションを使用して一連のbmpファイルを処理する必要があります。TBitmapクラスを使用していますが、このエラーのためにコードがコンパイルされません。

E2003 Undeclared identifier: 'Create'

このサンプルアプリは問題を再現します

{$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.

なぜこのコードはコンパイルされないのですか?

4

1 に答える 1

21

問題はuses句の順序にあり、WinApi.WindowsおよびVcl.GraphicsユニットにはTBitmapと呼ばれるタイプがあり、コンパイラがあいまいなタイプを検出する と、存在するusesリストの最後のユニットを使用してタイプを解決します。この場合、 BITMAP WinAPi構造を指すWindowsユニットのTBitmapを使用して、この問題を解決し、ユニットの順序を次のように変更します。

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

または、次のように完全修飾名を使用して型を宣言できます。

procedure CreateBitMap;
Var
  Bmp  : Vcl.Graphics.TBitmap;
  Flag : DWORD;
begin
  Bmp:=Vcl.Graphics.TBitmap.Create;
  try
    //do something
  finally
   Bmp.Free;
  end;
end;
于 2012-05-06T22:58:33.907 に答える