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.
以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。