今日はMicrosoftのセキュリティアップデートの日です。
MS08-068
MS08-069
2008年11月12日
2008年11月11日
Delphi/C++Builder 2009 Japanese Hotfix 1
IDEの環境オプションのタイプライブラリの設定がエラーになる件(QC68044)のHotfixがリリースされています。事前にUpdate 1を適用しておく必要があるとのことです。
Team Japan » Delphi/C++Builder 2009 Japanese Hotfix 1
2008/11/12追記: C++Builder 2009ではdelphicompro120.jpは必要ないとのことです。
Team Japan » Delphi/C++Builder 2009 Japanese Hotfix 1
2008/11/12追記: C++Builder 2009ではdelphicompro120.jpは必要ないとのことです。
2008年11月4日
Delphi 2009/C++Builder 2009 Update 1
Delphi 2009/C++Builder 2009のUpdate 1がリリースされています。
Delphi and C++Builder 2009 Update 1 リリースノート
Delphi 2009 および C++Builder 2009 Update 1 バグフィックスリスト
Delphi and C++Builder 2009 Update 1 リリースノート
Delphi 2009 および C++Builder 2009 Update 1 バグフィックスリスト
2008年10月28日
Delphi Prism
PDCにあわせてDelphi.NETの次期版であるDelphi PrismがCodeGearからアナウンスされています(まとめのwikiページもあり (ja))。現時点でわかっていることを羅列してみます。
さぁどうなることやら。
2008/10/28追記: 手回しのよいことで、Delphi Prism FAQページもできています。
2008/11/04再追記: あれ?ネタ元はどこだっけな…。1週間で忘れてしまった…。
2011/05/04追記: codegear.comのリンクをembarcadero.comのものに差し替え。
- Microsoft Visual Studio Shell上で動作する。
- コンパイラはRemObjectのOxygeneを使用する。
- C#には実装されていないいくつかの機能(Parallel Loops,Inline Property Accessors,Class Contracts,Extended Constructor Calls,Boolean Double Comparisonなど)をサポートする。
- Monoを使用することでLinuxやMac OS X上でも動作する。
さぁどうなることやら。
2008/10/28追記: 手回しのよいことで、Delphi Prism FAQページもできています。
2008/11/04再追記: あれ?ネタ元はどこだっけな…。1週間で忘れてしまった…。
2011/05/04追記: codegear.comのリンクをembarcadero.comのものに差し替え。
2008年10月24日
2008年10月15日
Delphi 2009 Handbook
Marco CantuさんによればDelphi 2009 Handbookの作業が進行中だそうです。
Lulu.comから2008/11出版予定、44.50USD(約4500円)とのこと。
ちなみにDelphi 2007 Handbookもお勧めです。
Lulu.comから2008/11出版予定、44.50USD(約4500円)とのこと。
ちなみにDelphi 2007 Handbookもお勧めです。
2008年10月13日
[書籍]Advanced Windows 第5版
Advanced Windowsの第5版が出るらしい(2008/10/23 2008/10/27予定)。
Advanced Windows 第5版 上/Jeffrey Richter, Christophe Nasarre著/(株)クイープ訳/日経BPソフトプレス/ISBN 978-4-89100-592-4/5,775円
Advanced Windows 第5版 下/Jeffrey Richter, Christophe Nasarre著/(株)クイープ訳/日経BPソフトプレス/ISBN 978-4-89100-593-9/5,985円
問題は、値段はともかく、第4版が積まれたままになっているということか…。
2008/10/22追記: 日経BPソフトプレスによると発行日は2008/10/27とのことなので修正。
2008/11/04再追記: 2008/10/24に買って積んだ。読む時間がほしい。
Advanced Windows 第5版 上/Jeffrey Richter, Christophe Nasarre著/(株)クイープ訳/日経BPソフトプレス/ISBN 978-4-89100-592-4/5,775円
Advanced Windows 第5版 下/Jeffrey Richter, Christophe Nasarre著/(株)クイープ訳/日経BPソフトプレス/ISBN 978-4-89100-593-9/5,985円
問題は、値段はともかく、第4版が積まれたままになっているということか…。
2008/10/22追記: 日経BPソフトプレスによると発行日は2008/10/27とのことなので修正。
2008/11/04再追記: 2008/10/24に買って積んだ。読む時間がほしい。
2008年10月11日
NTFSファイル圧縮機能を利用する(3)
NTFSで使用することができるファイル圧縮機能をプログラムから利用する方法の第三弾です。
フォルダの圧縮属性をセット/リセットしても、そのフォルダに新規に作成するファイルのデフォルトの属性として適用されるだけで、既存のファイルには影響が及びません。そこで指定されたフォルダとそのサブフォルダ、含まれる全てのファイルをトラバースして圧縮属性をセット/リセットするようにします。
フォルダ/ファイルに圧縮属性を適用するたびにコールバック関数を呼び出して進行状況が呼び出し元に通知されるようになっています。コールバックが不要な場合はnilを指定してください。またDelphi 2009ではコールバックに新機能の無名メソッドを使用するようにしてみました。
Delphi 2007およびそれ以前のバージョンでは以下のように呼び出します(フォーム上にButton1/Edit1/CheckBox1/Label1を配置)。
フォルダの圧縮属性をセット/リセットしても、そのフォルダに新規に作成するファイルのデフォルトの属性として適用されるだけで、既存のファイルには影響が及びません。そこで指定されたフォルダとそのサブフォルダ、含まれる全てのファイルをトラバースして圧縮属性をセット/リセットするようにします。
フォルダ/ファイルに圧縮属性を適用するたびにコールバック関数を呼び出して進行状況が呼び出し元に通知されるようになっています。コールバックが不要な場合はnilを指定してください。またDelphi 2009ではコールバックに新機能の無名メソッドを使用するようにしてみました。
uses
Windows, SysUtils;
{$IFDEF VER200}
{$DEFINE ANONYMOUSMETHOD} // Anonymous method is available on Delphi 2009 or later
{$ENDIF}
type
{ Callback function declaration }
TNotifyCompressFunc = {$IFDEF ANONYMOUSMETHOD} reference to {$ENDIF}
procedure (const Filename: String;
Operation: TCompressOperation
{$IFNDEF ANONYMOUSMETHOD}; Param: DWORD {$ENDIF});
procedure CompressDirectory(const Dirname: String;
Operation: TCompressOperation;
IgnoreError: Boolean;
CallbackFunc: TNotifyCompressFunc
{$IFNDEF ANONYMOUSMETHOD}; Param: DWORD{$ENDIF});
{ Forward declarations }
procedure InternalCompressDirectory(const Dirname: String;
Operation: TCompressOperation;
IgnoreError: Boolean;
CallbackFunc: TNotifyCompressFunc
{$IFNDEF ANONYMOUSMETHOD}; Param: DWORD{$ENDIF}); forward;
{$WARN SYMBOL_PLATFORM OFF}
procedure CompressDirectory(const Dirname: String;
Operation: TCompressOperation;
IgnoreError: Boolean;
CallbackFunc: TNotifyCompressFunc
{$IFNDEF ANONYMOUSMETHOD}; Param: DWORD{$ENDIF});
var
Attr: DWORD;
Path: String;
begin
if VolumeCanCompress(Dirname) = False then
begin
{ This volume is not support compression }
Exit;
end;
Path := ExcludeTrailingPathDelimiter(Dirname);
{ Get directory attributes }
Attr := GetFileAttributes(PChar(Path));
if Attr = $FFFFFFFF then
begin
RaiseLastOSError;
end;
{ Compress or decompress directory }
InternalCompressDirectory(IncludeTrailingPathDelimiter(Dirname),Operation,
IgnoreError,CallbackFunc
{$IFNDEF ANONYMOUSMETHOD},Param{$ENDIF});
{ Compress or decompress }
if NeedChangeCompression(Operation,Attr) = True then
begin
if Assigned(CallbackFunc) then
begin
CallbackFunc(Path,Operation{$IFNDEF ANONYMOUSMETHOD},Param{$ENDIF});
end;
try
InternalCompressFile(Path,Operation,Attr);
except
if IgnoreError = False then
begin
raise;
end;
end;
end;
end;
procedure InternalCompressDirectory(const Dirname: String;
Operation: TCompressOperation;
IgnoreError: Boolean;
CallbackFunc: TNotifyCompressFunc
{$IFNDEF ANONYMOUSMETHOD}; Param: DWORD{$ENDIF});
var
SR: TSearchRec;
Path: String;
begin
if FindFirst(Dirname + '*.*',faAnyFile,SR) = 0 then
begin
try
repeat
{ Skip current and parent directory }
if (SR.Name = '.') or (SR.Name = '..') then
begin
Continue;
end;
Path := Dirname + SR.Name;
{ Compress or decompress directory (recursive call) }
if (SR.Attr and FILE_ATTRIBUTE_DIRECTORY) <> 0 then
begin
InternalCompressDirectory(IncludeTrailingPathDelimiter(Path),
Operation,IgnoreError,CallbackFunc
{$IFNDEF ANONYMOUSMETHOD},Param{$ENDIF});
end;
{ Compress or decompress }
if NeedChangeCompression(Operation,SR.Attr) = True then
begin
if Assigned(CallbackFunc) then
begin
CallbackFunc(Path,Operation{$IFNDEF ANONYMOUSMETHOD},Param{$ENDIF});
end;
try
InternalCompressFile(Path,Operation,SR.Attr);
except
if IgnoreError = False then
begin
raise;
end;
end;
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
end;
{$WARN SYMBOL_PLATFORM ON}
パラメータIgnoreErrorは、Explorerで開いているフォルダを(圧縮属性を適用するために)CreateFileでオープンしたときにエラーになるため、これを無視するためのものです。Delphi 2007およびそれ以前のバージョンでは以下のように呼び出します(フォーム上にButton1/Edit1/CheckBox1/Label1を配置)。
procedure CallbackFunc(const Filename: String; Operation: TCompressOperation; Param: DWORD);
begin
TForm1(Param).Label1.Caption := 'Compressing: ' + Filename;
TForm1(Param).Refresh;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CompressDirectory(Edit1.Text,coCompress,CheckBox1.Checked,
CallbackFunc,DWORD(Self));
Label1.Caption := 'Finished.';
end;
これに対してDelphi 2009の無名メソッドを使用する場合は以下のように呼び出します。procedure TForm1.Button1Click(Sender: TObject);
begin
CompressDirectory(Edit1.Text,coCompress,CheckBox1.Checked,
procedure(const Filename: String; Operation: TCompressOperation)
begin
Label1.Caption := 'Compressing: ' + Filename;
Refresh;
end);
Label1.Caption := 'Finished.';
end;
同じ内容の無名メソッドの使いまわしを考えるのであれば、こんな風にします。function MakeCallbackFunc(Form: TForm1): TNotifyCompressFunc;
begin
Result :=
procedure(const Filename: String; Operation: TCompressOperation)
begin
case Operation of
coCompress:
begin
Form.Label1.Caption := 'Compressing: ' + Filename;
end;
coDecompress:
begin
Form.Label1.Caption := 'Decompressing: ' + Filename;
end;
end;
Form.Refresh;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CompressDirectory(Edit1.Text,coCompress,CheckBox1.Checked,
MakeCallbackFunc(Self));
Label1.Caption := 'Finished.';
end;
元ねたはNTFSの圧縮機能 - HEROPA's HomePageやサンプルプログラム集 ファイルの圧縮属性の変更あたり。
2008年10月10日
NTFSファイル圧縮機能を利用する(2)
NTFSで使用することができるファイル圧縮機能をプログラムから利用する方法の第二弾です。
ファイル/フォルダの圧縮属性をセット/リセットするにはCreateFileでファイル/フォルダをオープンし、DeviceIoControlでFSCTL_SET_COMPRESSIONを指定します。
元ねたはNTFSの圧縮機能 - HEROPA's HomePageやサンプルプログラム集 ファイルの圧縮属性の変更あたり。
ファイル/フォルダの圧縮属性をセット/リセットするにはCreateFileでファイル/フォルダをオープンし、DeviceIoControlでFSCTL_SET_COMPRESSIONを指定します。
uses
Windows, SysUtils;
type
{ Compress operation }
TCompressOperation = (coCompress, coDecompress);
const
FSCTL_SET_COMPRESSION = $0009C040;
COMPRESSION_FORMAT_NONE = $00000000;
COMPRESSION_FORMAT_DEFAULT = $00000001;
procedure InternalCompressFile(const Filename: String;
Operation: TCompressOperation;
Attr: DWORD); forward;
function NeedChangeCompression(Operation: TCompressOperation;
Attr: DWORD): Boolean; forward;
{$WARN SYMBOL_PLATFORM OFF}
procedure CompressFile(const Filename: String; Operation: TCompressOperation);
var
Attr: DWORD;
begin
if VolumeCanCompress(Filename) = False then
begin
{ This volume is not support compression }
Exit;
end;
{ Get file attributes }
Attr := GetFileAttributes(PChar(Filename));
if Attr = $FFFFFFFF then
begin
RaiseLastOSError;
end;
if NeedChangeCompression(Operation,Attr) = True then
begin
{ Compress or decompress }
InternalCompressFile(Filename,Operation,Attr);
end;
end;
procedure InternalCompressFile(const Filename: String;
Operation: TCompressOperation;
Attr: DWORD);
const
CompressionFormat: array [TCompressOperation] of DWORD =
(COMPRESSION_FORMAT_DEFAULT, // Compress by default format
COMPRESSION_FORMAT_NONE); // Decompress
var
Handle: THandle;
InBuffer: DWORD;
BytesReturned: DWORD;
Access: DWORD;
Flags: DWORD;
begin
{ Flags for CreateFile }
Access := GENERIC_READ or GENERIC_WRITE;
if (Attr and FILE_ATTRIBUTE_DIRECTORY) = 0 then
begin
Flags := FILE_ATTRIBUTE_NORMAL;
end
else
begin
Flags := FILE_FLAG_BACKUP_SEMANTICS;
end;
{ Reset read-only attribute }
if (Attr and FILE_ATTRIBUTE_READONLY) <> 0 then
begin
SetFileAttributes(PChar(Filename),Attr and not FILE_ATTRIBUTE_READONLY);
end;
try
{ Open file or directory }
Handle := CreateFile(PChar(Filename),Access,0,nil,OPEN_EXISTING,Flags,0);
if Handle = INVALID_HANDLE_VALUE then
begin
RaiseLastOSError;
end;
try
{ Compress or decompress }
InBuffer := CompressionFormat[Operation];
Win32Check(DeviceIoControl(Handle,FSCTL_SET_COMPRESSION,
@InBuffer,SizeOf(InBuffer),
nil,0,BytesReturned,nil));
finally
{ Close }
CloseHandle(Handle);
end;
finally
{ Restore read-only attribute }
if (Attr and FILE_ATTRIBUTE_READONLY) <> 0 then
begin
SetFileAttributes(PChar(Filename),
GetFileAttributes(PChar(Filename)) or
FILE_ATTRIBUTE_READONLY);
end;
end;
end;
function NeedChangeCompression(Operation: TCompressOperation;
Attr: DWORD): Boolean;
begin
Result := ((Ord(Operation) xor
Ord((Attr and FILE_ATTRIBUTE_COMPRESSED) <> 0)) = 0);
end;
{$WARN SYMBOL_PLATFORM ON}
ファイル/フォルダをオープンするときはCreateFileでdwDesiredAccessにGENERIC_READ or GENERIC_WRITEを、dwCreationDispositionにOPEN_EXISTINGを、それぞれ指定する必要があります。また対象がフォルダのときはdwFlagsAndAttributesにFILE_FLAG_BACKUP_SEMANTICSを指定します。さらにファイル/フォルダの属性に書込禁止(FILE_ATTRIBUTE_READONLY)が含まれている場合はSetFileAttributesで一時的に解除する必要もあります。元ねたはNTFSの圧縮機能 - HEROPA's HomePageやサンプルプログラム集 ファイルの圧縮属性の変更あたり。
2008年10月9日
NTFSファイル圧縮機能を利用する(1)
NTFSで使用することができるファイル圧縮機能をプログラムから利用する方法の第一弾です。
そのボリュームでNTFSファイル圧縮機能を使用できるかどうかはGetVolumeInformationでFileSystemFlagsを取得し、FS_FILE_COMPRESSIONが含まれているかどうかで判定します。
そのボリュームでNTFSファイル圧縮機能を使用できるかどうかはGetVolumeInformationでFileSystemFlagsを取得し、FS_FILE_COMPRESSIONが含まれているかどうかで判定します。
uses
Windows, SysUtils;
{$WARN SYMBOL_PLATFORM OFF}
function VolumeCanCompress(const Filename: String): Boolean;
var
MaximumComponentLength: DWORD;
FileSystemFlags: DWORD;
RootPath: String;
begin
{ Get root path }
RootPath := IncludeTrailingPathDelimiter(ExtractFileDrive(Filename));
{ Get volume information }
Win32Check(GetVolumeInformation(PChar(RootPath),nil,0,nil,
MaximumComponentLength,FileSystemFlags,
nil,0));
{ Check FS_FILE_COMPRESSION flag }
Result := ((FileSystemFlags and FS_FILE_COMPRESSION) <> 0);
end;
{$WARN SYMBOL_PLATFORM ON}
元ねたはNTFSの圧縮機能 - HEROPA's HomePageなど。
2008年10月3日
レジストリのデータをエクスポートする
Windowsのレジストリに書き込んだ設定をファイルにエクスポートするには
を実行します。Windows Vistaではレジストリエディタ(REGEDIT.EXE)がUACで管理者権限を要求するため、管理者として実行する必要があります。
REGEDIT.EXE /e "<exportfile>" "<keyname>"
<exportfile> ... 出力ファイル名(拡張子.REG)
<keyname> ... 出力する最上位のキー名(HKEY_CURRENT_USER\...)を実行します。Windows Vistaではレジストリエディタ(REGEDIT.EXE)がUACで管理者権限を要求するため、管理者として実行する必要があります。
2008年9月28日
Delphi/C++Builder 2009に同梱のInstallAwareについて
Delphi/C++Builder 2009に同梱のInstallAwareがInstallAware Express 6 CodeGear Special Editionのままでした。これはちょっと…。IAの現行バージョンは8なんですけど。
2008/12/05追記:DEKOさんのご指摘 DEKOさんのご指摘のとおりで、DVDの \InstallAware\ia-codegear-express-special-edition.exe がInstallAware 7 CodeGear Special Edition (InstallAware Express CodeGear Special Edition. Based on InstallAware 7 Release 2 (Build babiali_r2.070408)、Version 7.9.7201.2008、英語版)になっています。なおインストーラをローカライズしたいときなどもDEKOさんのちっぷす DEKOさんのちっぷすが非常に役に立ちます。それにしてもどこかの会社で日本語にローカライズして販売してくれませんかね?
2008/12/05追記:
2008年9月16日
Delphi 2009のUnicodeサポート(日本語訳)
Nick HodgesさんのUnicodeサポート関連の記事の日本語訳が公開されています。
Delphi Unicodeワールド パートI: Unicodeとは? なぜ必要なのか? そして、Delphiでどのような作業を行うのか?
Delphi Unicodeワールド パートII: RTLの新機能と、Unicodeをサポートするクラス
Delphi Unicodeワールド パートIII: コードをUnicode対応にする
2008/09/17追記: パートII/IIIのリンクを追加しました。
2010/08/27追記: リンクをcodegear.comからembarcadero.comのものに差し替えました。
2010/09/28追記: パート1のリンク先が変更されたので修正しました。
Delphi Unicodeワールド パートI: Unicodeとは? なぜ必要なのか? そして、Delphiでどのような作業を行うのか?
Delphi Unicodeワールド パートII: RTLの新機能と、Unicodeをサポートするクラス
Delphi Unicodeワールド パートIII: コードをUnicode対応にする
2008/09/17追記: パートII/IIIのリンクを追加しました。
2010/08/27追記: リンクをcodegear.comからembarcadero.comのものに差し替えました。
2010/09/28追記: パート1のリンク先が変更されたので修正しました。
2008年9月12日
DataSnap 2009
あとで読む。
DataSnap 2009 概要
DataSnap 2009のメモリー管理
DataSnap 2009のスレッドモデル
DataSnapってなにそれ?おいしいの?状態だけど。
2008/09/26追記:
C++BuilderにおけるDataSnap 2009のサポートについて
DataSnap 2009 概要
DataSnap 2009のメモリー管理
DataSnap 2009のスレッドモデル
DataSnapってなにそれ?おいしいの?状態だけど。
2008/09/26追記:
C++BuilderにおけるDataSnap 2009のサポートについて
2008年9月10日
2008年9月9日
第10回エンバカデロ・デベロッパーキャンプ(東京)終了
参加者の皆さんおつかれさまでした。関係者の皆さんはまだ明後日(大阪)があるので頑張ってくださいね。
さて、公開されてNDAから外れた重要情報を。
1.Turbo Explorer SKUについては考慮中。ただし機能は削って『言語の習得に絞った』ものにする(言語というのはこの場合C++/Object Pascalを指すと思われる)。つまり現状のTurbo Explorerとはかなり異なったものになるのでは?
2.Delphi.NETは次のRAD Studio(年内リリース?)には含まれる。その後はMicrosoft Visual Studioのプラグインとして.NET Framework 3.5の対応も含め.NETの全機能に対応していきたい。ただしRAD Studioのパーソナリティではなくなる。
それからロードマップ上Tiburonの次になるCommodoreは2009年3Q-4Qになりそうです(今までの情報よりは若干後退)。64bit対応以外にもマルチタスク/マルチスレッドサポートなどを盛り込むかどうかを検討中とのこと。
2008/09/18追記: セッション資料がダウンロードできるようになっています。
2008/09/25再追記: Nick Hodgesさんのテクニカルセッションのビデオも公開されています。
ビデオ - Delphi 2009 / C++Builder 2009最新情報
2008/10/01再々追記: Nick Hodgesさんのジェネラルセッションのビデオも公開されました。
ビデオ - CodeGearプロダクトアップデート
2011/05/04追記: dn.codegear.comのリンクをedn.embarcadero.comのものに差し替え。
さて、公開されてNDAから外れた重要情報を。
1.Turbo Explorer SKUについては考慮中。ただし機能は削って『言語の習得に絞った』ものにする(言語というのはこの場合C++/Object Pascalを指すと思われる)。つまり現状のTurbo Explorerとはかなり異なったものになるのでは?
2.Delphi.NETは次のRAD Studio(年内リリース?)には含まれる。その後はMicrosoft Visual Studioのプラグインとして.NET Framework 3.5の対応も含め.NETの全機能に対応していきたい。ただしRAD Studioのパーソナリティではなくなる。
それからロードマップ上Tiburonの次になるCommodoreは2009年3Q-4Qになりそうです(今までの情報よりは若干後退)。64bit対応以外にもマルチタスク/マルチスレッドサポートなどを盛り込むかどうかを検討中とのこと。
2008/09/18追記: セッション資料がダウンロードできるようになっています。
2008/09/25再追記: Nick Hodgesさんのテクニカルセッションのビデオも公開されています。
ビデオ - Delphi 2009 / C++Builder 2009最新情報
2008/10/01再々追記: Nick Hodgesさんのジェネラルセッションのビデオも公開されました。
ビデオ - CodeGearプロダクトアップデート
2011/05/04追記: dn.codegear.comのリンクをedn.embarcadero.comのものに差し替え。
2008年9月8日
Welcome to Japan, Nick
Nick Hodgesさんがオーストラリアからはしごで来日されたようです(来たのは昨日かな?)。早速お仕事のようで。
DelphiとC++Builderの“再活性化”に向けて、エンバカデロが新版をアピール
DelphiとC++Builderの“再活性化”に向けて、エンバカデロが新版をアピール
2008年9月4日
標準条件シンボル
標準条件シンボル
Delphiで予め定義済のシンボルを標準条件シンボル(standard conditional symbols)と呼び、以下のようなものがあります。
ヘルプにはCPU32BITS/CPU64BITSはDelphi XE2以降との記述がありますが、実際にはDelphi XE8以降で有効です。
またVER<nnn>はそれぞれ以下のプロダクトで定義されています(VER180はDelphi/C++Builder 2006と2007の両方で定義済、VER185はDelphi/C++Builder 2007のみで定義済)。
定数値RTLVersion<nnn(n)>はDelphi 10.4.2で導入されました。型はすべてBooleanで値はTrue、{$IF RTLVersion<nnn(n)>}のようにすることで定義済みかどうかを調べることができます。
ねた元はDelphi Tips - 0086とかDelphi Compiler Version Directives: {$IFDEF VER180}とか多数。もうちょっとヘルプが親切ならなぁ。オンラインヘルプの条件付きコンパイル(Delphi) (en)およびコンパイラ バージョン (en)に完全な定義が掲載されました。素晴らしい。
2008/12/23追記: Borland Compiler Conditional Defines - Delphiを参考にちょこちょこっと修正。
2009/09/02追記: Delphi/C++Builder 2010のVER210を追加。
2010/10/12追記: Delphi/C++Builder XEのVER220を追加。
2011/09/02追記: Delphi/C++Builder XE2関係を追加。
2012/09/02追記: Delphi/C++Builder XE3のVER240を追加。
2013/04/20追記: Delphi/C++Builder XE4のVER250/iOS/CPUARM/AUTOREFCOUNT/EXTERNAL_LINKER/NEXTGEN/UNDERSCOREIMPORTNAME/WEAKREF/WEAKINSTREF/WEAKINTREFを追加。
2013/09/12追記: Delphi/C++Builder XE5のVER260/Androidを追加。
2014/04/15追記: Appmethod 1のVER265とDelphi/C++Builder XE6のVER270を追加。
2014/09/02追記: Delphi/C++Builder XE7のVER280を追加。
2015/04/07追記: Delphi/C++Builder XE8のVER290を追加。
2015/09/01追記: Delphi/C++Builder 10 SeattleのVER300を追加。
2015/11/16追記: Delphi/C++Builder XE8以降のCPU32BITS/CPU64BITSを追加。
2016/04/20追記: Delphi/C++Builder 10.1 BerlinのVER310を追加。
2016/08/19追記: Compiler Versionsを参考に微妙に修正。
2017/03/23追記: Delphi/C++Builder 10.2 TokyoのVER320を追加。
2018/11/22追記: いくつかの標準条件シンボルが欠けていたのを修正。
2018/11/26追記: Delphi/C++Builder 10.3 RioのVER330を追加。
2020/06/01追記: Delphi/C++Builder 10.3.3 RioのANDROID64とDelphi/C++Builder 10.4 SydneyのVER340を追加。
2021/05/05追記: Delphi/C++Builder 10.4.2以降のRTLVersion<nnnn>(RTLVersion1041、RTLVersion1042)を追加。
2021/09/10追記: Delphi/C++Builder 11 AlexandriaのVER350とOSX/OSX64を追加。
2022/03/16追記: Delphi/C++Builder 11.1 AlexandriaのRTLVersion111とFRAMEWORK_VCL、FRAMEWORK_FMXを追加。
2022/09/13追記: Delphi/C++Builder 11.2 AlexandriaのRTLVersion112を追加。
2023/03/07追記: Delphi/C++Builder 11.3 AlexandriaのRTLVersion113を追加。
2023/11/09追記: Delphi/C++Builder 12 AthensのVER360を追加。
2023/11/24追記: Delphi/C++Builder 12 AthensのWEAK_NATIVEINTを追加。
2024/04/05追記: Delphi/C++Builder 12.1 AthensのRTLVersion121を追加。
2025/04/23追記: Delphi/C++Builder 12.2 AthensのRTLVersion122、12.3 AthensのRTLVersion123を追加。
2026/03/22追記: Delphi/C++Builder 13のVER370、Delphi/C++Builder 13.1のARM64EC、LLVMを追加。
- VER<nnn>
- コンパイラバージョン
- RTLVersion<nnnn>
- ランタイムマイナーバージョン(仮)(Delphi 10.4.2以降)
- DCC
- (全ての環境で定義)
- CONSOLE
- コンソールアプリケーション
- NATIVECODE
- ネイティブコード(Delphi.net以降の.NET環境以外で定義)
- MSWINDOWS
- Windows(Kylix/macOS/iOS/Android/Linux以外で定義)
- WIN32
- Windows x86環境で定義(Delphi 6以降)
- WIN64
- Windows x64環境で定義(Delphi XE2以降)
- ARM64EC
- Windows on ARMのARM64EC環境で定義(Delphi 13.1以降)
- MACOS
- MacOS環境で定義(Delphi XE2以降)
- MACOS32
- MacOS 32bit環境で定義(Delphi XE2以降)
- MACOS64
- MacOS 64bit環境で定義(Delphi XE8以降)
- OSX
- OSX(MacOS)環境で定義(Delphi 11以降)
- OSX64
- OSX(MacOS)環境で定義(Delphi 11以降)
- POSIX
- MacOSを含むPOSIX環境で定義(Kykix/Delphi XE2以降)
- POSIX32
- MacOSを含むPOSIX 32bit環境で定義(Kykix/Delphi XE2以降)
- POSIX64
- MacOSを含むPOSIX 64bit環境で定義(Delphi XE2以降)
- IOS
- iOS(デバイス/シミュレータ)環境で定義(Delphi XE4以降)
- IOS32
- iOS 32bit環境で定義(Delphi XE8以降)
- IOS64
- iOS 64bit環境で定義(Delphi XE8以降)
- LINUX
- Linux環境で定義(Kylix/Delphi 10.2以降)
- LINUX32
- Linux 32bit環境で定義(Kylix/Delphi 10.2以降)
- LINUX64
- Linux 64bit環境で定義(Delphi 10.2以降)
- ANDROID
- Android環境で定義(Delphi XE5以降)
- ANDROID32
- Android 32bit環境で定義(Delphi XE8以降)
- ANDROID64
- Android 64bit環境で定義(Delphi 10.3.3以降)
- CLR
- .NET環境で定義
- CPU386
- i386以降のCPU
- CPUX86
- x86のCPU(Delphi XE2以降)
- CPUX64
- x64のCPU(Delphi XE2以降)
- CPUXARM
- ARMのCPU(Delphi XE4以降)
- CPUARM32
- 32bit版ARMのCPU(Delphi XE8以降)
- CPUARM64
- 64bit版ARMのCPU(Delphi XE8以降)
- CPU32BITS
- 32bitのCPU(Delphi XE8以降)
- CPU64BITS
- 64bitのCPU(Delphi XE8以降)
- ASSEMBLER
- アセンブラ構文(asm)を使用できるかどうか
- UNICODE
- Unicode環境で定義(Delphi 2009以降)
- CONDITIONALEXPRESSIONS
- 条件評価($IF指令)を使用できるかどうか
- ALIGN_STACK
- OS Xコンパイラやその他の(Linux)コンパイラなどの厳密なスタックアライメント要求がない環境で定義(Delphi XE2以降)
- PC_MAPPED_EXCEPTIONS
- 例外の巻き戻しにアドレスマップを使用するプラットフォーム用コンパイラで定義(Delphi XE2以降)
- PIC
- OS XのようにPIC(位置独立コード)が要求されるプラットフォームで定義(Delphi XE2以降)
- AUTOREFCOUNT
- ARC(Automatic Reference Counting)をサポートする環境で定義(Delphi XE4以降、Delphi 10.4 Sydneyですべてのコンパイラが未定義に)
- EXTERNALLINKER
- 外部リンカを使用する環境で定義(Delphi XE4以降)(obsoleted)
- NEXTGEN
- (LLVMベースの)"NEXTGEN"コンパイラで定義(Delphi XE4以降、Delphi 10.4 Sydneyですべてのコンパイラが未定義に)
- ELF
- 実行/オブジェクトファイルがELF形式の環境で定義(Delphi 10.2以降)
- UNDERSCOREIMPORTNAME
- インポートされた名前が"_"(アンダースコア)付きになる環境で定義(Delphi XE4以降)
- WEAKREF
- 弱い参照(weak reference)が有効な環境で定義(Delphi XE4以降)
- WEAKINSTREF
- 弱い参照がインスタンスに定義される環境で定義(Delphi XE4以降、Delphi 10.4 Sydneyですべてのコンパイラが未定義に)
- WEAKINTREF
- 弱い参照がインタフェースに定義される環境で定義(Delphi XE4以降)
- FRAMEWORK_VCL
- プロジェクトがVCLフレームワークを使用(Delphi 11.1以降)
- FRAMEWORK_FMX
- プロジェクトがFMXフレームワークを使用(Delphi 11.1以降)
- WEAK_NATIVEINT
- NativeInt/NativeUIntが型エイリアスの環境で定義(Delphi 12)
- BCB
- C++Builderで定義
- WINDOWS
- Win16環境で定義
- LLVM
- LLVMベースコンパイラで定義(Delphi 13.1以降)
またVER<nnn>はそれぞれ以下のプロダクトで定義されています(VER180はDelphi/C++Builder 2006と2007の両方で定義済、VER185はDelphi/C++Builder 2007のみで定義済)。
- VER40
- Turbo Pascal 4.0
- VER50
- Turbo Pascal 5.0
- VER55
- Turbo Pascal 5.5
- VER60
- Turbo Pascal 6.0
- VER10
- Turbo Pascal for Windows 1.0
- VER15
- Turbo Pascal for Windows 1.5
- VER70
- Borland Pascal 7.0
- VER80
- Delphi 1
- VER90
- Delphi 2
- VER93
- C++Builder 1
- VER100
- Delphi 3
- VER110
- C++Builder 3
- VER120
- Delphi 4
- VER125
- C++Builder 4
- VER130
- Delphi 5, C++Builder 5
- VER140
- Delphi 6, C++Builder 6, Kylix 1, Kylix 2, Kylix 3
- VER150
- Delphi 7, 7.1
- VER160
- Delphi 8 for .NET, C#Builder
- VER170
- Delphi 2005, C++Builder 2005 (Ver9)
- VER180
- Delphi 2006, C++Builder 2006 (Ver10), Delphi 2007, C++Builder 2007 (Ver11)
- VER185
- Delphi 2007, C++Builder 2007 (Ver11)
- VER190
- Delphi 2007 for .NET (Ver11)
- VER200
- Delphi 2009, C++Builder 2009 (Ver12)
- VER210
- Delphi 2010, C++Builder 2010 (Ver14)
- VER220
- Delphi XE, C++Builder XE (Ver15)
- VER230
- Delphi XE2, C++Builder XE2 (Ver16)
- VER240
- Delphi XE3, C++Builder XE3 (Ver17)
- VER250
- Delphi XE4, C++Builder XE4 (Ver18)
- VER260
- Delphi XE5, C++Builder XE5, Appmethod 1.13 (Ver19)
- VER265
- Appmethod 1.13 (Ver19.5)
- VER270
- Delphi XE6, C++Builder XE6, Appmethod 1.14 (Ver20)
- VER280
- Delphi XE7, C++Builder XE7, Appmethod 1.15 (Ver21)
- VER290
- Delphi XE8, C++Builder XE8, Appmethod 1.16 (Ver22)
- VER300
- Delphi 10 Seattle, C++Builder 10 Seattle (Ver23)
- VER310
- Delphi 10.1 Berlin, C++Builder 10.1 Berlin (Ver24)
- VER320
- Delphi 10.2 Tokyo, C++Builder 10.2 Tokyo (Ver25)
- VER330
- Delphi 10.3 Rio, C++Builder 10.3 Rio (Ver26)
- VER340
- Delphi 10.4 Sydney, C++Builder 10.4 Sydney (Ver27)
- VER350
- Delphi 11 Alexandria, C++Builder 11 Alexandria (Ver28)
- VER360
- Delphi 12 Athens, C++Builder 12 Athens (Ver29)
- VER370
- Delphi 13 Florence, C++Builder 13 Florence (Ver37)
定数値RTLVersion<nnn(n)>はDelphi 10.4.2で導入されました。型はすべてBooleanで値はTrue、{$IF RTLVersion<nnn(n)>}のようにすることで定義済みかどうかを調べることができます。
- RTLVersion1041
- Delphi 10.4.2
- RTLVersion1042
- Delphi 10.4.2
- RTLVersion111
- Delphi 11.1/11.2/11.3
- RTLVersion112
- Delphi 11.2/11.3
- RTLVersion113
- Delphi 11.3
- RTLVersion121
- Delphi 12.1/12.2/12.3
- RTLVersion122
- Delphi 12.2/12.3
- RTLVersion123
- Delphi 12.3
ねた元はDelphi Tips - 0086とかDelphi Compiler Version Directives: {$IFDEF VER180}とか多数。
2008/12/23追記: Borland Compiler Conditional Defines - Delphiを参考にちょこちょこっと修正。
2009/09/02追記: Delphi/C++Builder 2010のVER210を追加。
2010/10/12追記: Delphi/C++Builder XEのVER220を追加。
2011/09/02追記: Delphi/C++Builder XE2関係を追加。
2012/09/02追記: Delphi/C++Builder XE3のVER240を追加。
2013/04/20追記: Delphi/C++Builder XE4のVER250/iOS/CPUARM/AUTOREFCOUNT/EXTERNAL_LINKER/NEXTGEN/UNDERSCOREIMPORTNAME/WEAKREF/WEAKINSTREF/WEAKINTREFを追加。
2013/09/12追記: Delphi/C++Builder XE5のVER260/Androidを追加。
2014/04/15追記: Appmethod 1のVER265とDelphi/C++Builder XE6のVER270を追加。
2014/09/02追記: Delphi/C++Builder XE7のVER280を追加。
2015/04/07追記: Delphi/C++Builder XE8のVER290を追加。
2015/09/01追記: Delphi/C++Builder 10 SeattleのVER300を追加。
2015/11/16追記: Delphi/C++Builder XE8以降のCPU32BITS/CPU64BITSを追加。
2016/04/20追記: Delphi/C++Builder 10.1 BerlinのVER310を追加。
2016/08/19追記: Compiler Versionsを参考に微妙に修正。
2017/03/23追記: Delphi/C++Builder 10.2 TokyoのVER320を追加。
2018/11/22追記: いくつかの標準条件シンボルが欠けていたのを修正。
2018/11/26追記: Delphi/C++Builder 10.3 RioのVER330を追加。
2020/06/01追記: Delphi/C++Builder 10.3.3 RioのANDROID64とDelphi/C++Builder 10.4 SydneyのVER340を追加。
2021/05/05追記: Delphi/C++Builder 10.4.2以降のRTLVersion<nnnn>(RTLVersion1041、RTLVersion1042)を追加。
2021/09/10追記: Delphi/C++Builder 11 AlexandriaのVER350とOSX/OSX64を追加。
2022/03/16追記: Delphi/C++Builder 11.1 AlexandriaのRTLVersion111とFRAMEWORK_VCL、FRAMEWORK_FMXを追加。
2022/09/13追記: Delphi/C++Builder 11.2 AlexandriaのRTLVersion112を追加。
2023/03/07追記: Delphi/C++Builder 11.3 AlexandriaのRTLVersion113を追加。
2023/11/09追記: Delphi/C++Builder 12 AthensのVER360を追加。
2023/11/24追記: Delphi/C++Builder 12 AthensのWEAK_NATIVEINTを追加。
2024/04/05追記: Delphi/C++Builder 12.1 AthensのRTLVersion121を追加。
2025/04/23追記: Delphi/C++Builder 12.2 AthensのRTLVersion122、12.3 AthensのRTLVersion123を追加。
2026/03/22追記: Delphi/C++Builder 13のVER370、Delphi/C++Builder 13.1のARM64EC、LLVMを追加。
登録:
投稿 (Atom)