Delphiのコンパイラバージョン情報

DELPHIにはコンパイラバージョンが#DEFINEで定義されています。
各VersionのDelphi/C++Builderに対するコンパイラバージョン定義は下記の通り

Delphiバージョン 定義
Delphi1 VER80
Delphi2 VER90
Delphi3 VER100
Delphi4 VER120
Delphi5 VER130
Delphi6 VER140
Kylix VER140
Delphi7 VER150
Delphi8 VER160
Delphi2005 VER170
BDS2006 VER180
TurboDelphi VER180
Delphi2007 VER185(VER180)
Delphi2009 VER200
Delphi2010 VER210
Delphi XE VER220
C++Builderバージョン 定義
C++Builder1 VER93
C++Builder3 VER110
C++Builder4 VER125
C++Builder5 VER130
C++Builder6 VER140
BDS2006 VER180
TurboC++ VER180
C++Builder2007 VER185(VER180)
C++Builder2009 VER200
C++Builder2010 VER210
C++BuilderXE VER220

だから、例えばソース中に

{$IFDEF VER170}
  ShowMessage('Delphi2005です');
{$ENDIF}

と書くことによって、Delphi2005のみメッセージが表示されるようにソースが書けます。
Delphi2007だけは、2006とコンパイラの言語仕様に変更がないためVER180もVER185も定義されています。
Delphiのコンパイラバージョンを調べるプログラムを書いておきます。

program DelphiCompilerVerChk;

uses
  SysUtils, Windows;

{$R *.res}

{-------------------------------
//      文字列を追加する関数
機能:       StringAdd(S, 'メッセージ')
            とすると、改行で区切られてSにメッセージが追加される
            StringAdd(S, 'メッセージ' '/')
            とすると、『/』で区切られてメッセージが追加される
備考:       
履歴:       2009/08/28(金)
              作成
//--▼----------------------▽--}
procedure StringAdd(var OriginalText: String; 
  Const AddText: String; Const Separator: String = #13#10);
var
  i: Integer;
  LenOriginal, LenSeparator, LenAdd: Integer;
begin
  if OriginalText = '' then
  begin
    OriginalText := AddText;
  end else
  begin
    LenOriginal := Length(OriginalText);
    LenSeparator:= Length(Separator);
    LenAdd      := Length(AddText);
    SetLength(OriginalText, LenOriginal + LenSeparator + LenAdd);
    for i := 1 to LenSeparator do
    begin
      OriginalText[LenOriginal + i] := Separator[i];
    end;
    for i := 1 to LenAdd do
    begin
      OriginalText[LenOriginal + LenSeparator + i] := AddText[i];
    end;
  end;
end;
//--△----------------------▲--

var
  MsgStr: String;
begin
  MsgStr := 'Version不明';

{$IFDEF VER80}  MsgStr := 'Delphi1';                    {$ENDIF}

{$IFDEF VER90}  MsgStr := 'Delphi2';                    {$ENDIF}

{$IFDEF VER93}  MsgStr := 'C++Builder1';                {$ENDIF}

{$IFDEF VER100} MsgStr := 'Delphi3';                    {$ENDIF}

{$IFDEF VER110} MsgStr := 'C++Builder3';                {$ENDIF}

{$IFDEF VER120} MsgStr := 'Delphi4';                    {$ENDIF}

{$IFDEF VER125} MsgStr := 'C++Builder4';                {$ENDIF}

{$IFDEF VER130} MsgStr := 'Delphi5';                    {$ENDIF}
{$IFDEF VER130} StringAdd(MsgStr, 'C++Builder5');       {$ENDIF}

{$IFDEF VER140} MsgStr := 'Delphi6';                    {$ENDIF}
{$IFDEF VER140} StringAdd(MsgStr, 'C++Builder6');       {$ENDIF}
{$IFDEF VER140} StringAdd(MsgStr, 'Kylix/2/3');         {$ENDIF}

{$IFDEF VER150} MsgStr := 'Delphi7';                    {$ENDIF}

{$IFDEF VER160} MsgStr := 'Delphi8';                    {$ENDIF}

{$IFDEF VER170} MsgStr := 'Delphi2005';                 {$ENDIF}

{$IFDEF VER180} MsgStr := 'BDS 2006(Delphi/C++)';       {$ENDIF}
{$IFDEF VER180} StringAdd(MsgStr, 'Turbo Delphi/C++');  {$ENDIF}

{$IFDEF VER185} MsgStr := 'Delphi2007';                 {$ENDIF}
{$IFDEF VER185} StringAdd(MsgStr, 'C++Builder2007');    {$ENDIF}

{$IFDEF VER200} MsgStr := 'Delphi2009';                 {$ENDIF}
{$IFDEF VER200} StringAdd(MsgStr, 'C++Builder2009');    {$ENDIF}

{$IFDEF VER210} MsgStr := 'Delphi2010';                 {$ENDIF}
{$IFDEF VER210} StringAdd(MsgStr, 'C++Builder2010');    {$ENDIF}

{$IFDEF VER220} MsgStr := 'Delphi XE';                  {$ENDIF}
{$IFDEF VER220} StringAdd(MsgStr, 'C++Builder XE');     {$ENDIF}

  Windows.MessageBox(0,
    PChar(MsgStr),
    PChar(ExtractFileName(ParamStr(0))), MB_OK);

end.

コメント (0件)


くろねこ研究所
https://www.blackcat.xyz/article.php/ProgramingFAQ_del0079