【Delphi】Delphi XE2 について

# はじめに
**『Delphi XE2』** についての概要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/c7dee250-6d77-3d36-7fdd-2d0729e4f22b.png)

# 概要
製品概要です。


| 項目 | 説明 |
|:---|:---|
| 製品名 | Delphi XE2 |
| コードネーム | Pulsar |
| 発売年 | 2011  |
| 発売元 | Embarcadero Technologies |
| ビルドバージョン | 16.0  |
| コンパイラバージョン | 23.0 |
| BDS バージョン | 9.0 |
| サポートプラットフォーム | Windows (32/64 bit) / macOS (32bit) / iOS (32bit)|

## 前バージョンとの違い

 - 64bit Windows 対応
 - 64bit Windows 用コンパイラ `dcc64.exe` が追加された
 - マルチプラットフォーム対応
 - マルチプラットフォーム用フレームワークとして **FireMonkey** が採用された
 - macOS 用クロスコンパイラ `dccosx.exe` が追加された
 - iOS 開発のための FPC ツールチェインが含まれる
 - ユニット名前空間が拡張された (ユニットスコープ。.NET 以外では初)
 - [プロジェクトマネージャ] でターゲットプラットフォームを追加/切替できるようになった
 - [プロジェクトオプション] でカスタムマニフェストを指定できるようになった
 - [プロジェクトオプション] でビルド番号の自動生成が行われるようになった (XE 以前のはビルド番号の自動更新)
 - リモートデバッガも兼ねるプラットフォームアシスタントサーバーアプリケーション (**PAServer**) が用意された
 - VCL スタイル (テーマ) が使えるようになった
 - FMX スタイル (テーマ) が使えるようになった
 - 『FastReports』が付属するようになった
 - 『Documentation Insight』が付属するようになった
 - zip を標準で扱えるようになった (`System.zip`)
 - `TEncoding.GetEncoding()` で文字列によるエンコーディング指定が可能となった
 -  OS の情報を得るための `SysUtils.TOSVersion` が用意されている
 - **LiveBindings** が使えるようになった
 - FireMonkey には `TAnimation` が用意されている
 - FireMonkey 用の条件コンパイル用の定数として `FireMonkeyVersion` が使えるようになった (Update 2 以降の `FMX.Types`)

## その他

 - インストールに .NET Framework 3.5 が必要となった
 - XE6 辺りまで FireMonkey 関連はリファクタリングが続き、混乱がみられる。このため、XE2 以降の全バージョンの Delphi を網羅した FireMonkey のクラスやルーチンを作る事は困難になっている
 - FireMonkey のフォームファイルにも互換性の問題がある
 - `FMX` 名前空間にあるクラスやルーチンのうち、汎用的なものは XE6 辺りまでにかけて `System` 名前空間に移動する
 - `TBCD` レコードに演算子のオーバーロードが追加され、BCD 演算を簡単に行えるようになった
 - <font color="Crimson">PAServer が Windows 8 (64bit) に対応していない</font> (Windows 8 以降の 64bit Windows で 64bit アプリケーションをデバッグ実行できない)
 - <font color="Crimson">TBitmap にバッファオーバーフローの脆弱性がある</font>
 - 2011 年には『Windows 7』の Service Pack 1 がリリースされています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8d7c1dbe-6737-a12a-b8fa-67fa567798a1.png)

### macOS について

macOS (当時は OS X) 用の開発には Mac 実機が必要なのですが、XE2 は Mac 実機なしでも実行形式ファイルを生成可能です (XE6 あたりまで可能だったかと)。

プロジェクト名が `MyApp` だった場合、次のようなフォルダ構成にして Mac に持って行くだけです。

```
[MyApp.app]
  |  
  +-[Contents]
    |  
    +-[MacOS]
    |  |
    |  +-MyApp
    |  |
    |  +-libcgcrtl.dylib       <- $(BDS)\Redist\osx32 から持ってくる: C++Builder のみ
    |  |
    |  +-libcgstl.dylib        <- $(BDS)\Redist\osx32 から持ってくる: C++Builder のみ
    |  |
    |  +-libcgunwind.1.0.dylib <- $(BDS)\Redist\osx32 から持ってくる
    |   
    +-[Resources]
    |  |
    |  +-MyApp.icns
    |
    +-info.plist               <- MyApp.info.plist をリネーム
```

### iOS について

iOS 開発では FPC (Free Pascal Compiler) がツールチェインに使われています。FPC とは微妙に方言が異なるので、そのままコンパイルできない箇所が出てきます。このツールチェインは不評だったのか XE2 のみで消える事となります [^1]。

### FireMonkey はどこから来たのか？

『FireMonkey』は元々 [KSDev の『VGScene』](https://web.archive.org/web/20100116181623/https://www.ksdev.com/)という製品でした。これが Embarcadero に売却され、組み込まれたものが FireMonkey です (FireMonkey 3D は恐らく『DXScene』がベース)。このため、初期の FireMonkey には「VG～」と名の付く識別子があったり、プロパティや関数名が英語圏ではあまり使われないようなものになっていたりします。

:::note
XE2 の最初期のリリースでは、『FireMonkey』に [『GLScene』](https://github.com/glscene/GLScene)(MPL) からのソースコード流用があり (『DXScene』の時点で流用があったのかは不明です)、その問題を解決するための Update 1 が急遽リリースされました。

> **Update 1 で解決されたライセンス上の問題**
FireMonkey の 3D サポートの一部のコードが MPL オープン ソース プロジェクトである GLScene のコードに似ているという連絡がありました。当社では、GLScene プロジェクトの主要な貢献者である Eric Grange 氏と協力して、この問題を修正しました。このアップデートにより、問題になっているコードが置き換えられます。そのため、このアップデートをインストールし、その後、元の FireMonkey ユニットを使ってコンパイルしたあらゆるアプリケーションをビルドし直すことを強くお勧めします。
>
> **重要： これまでに FireMonkey 3D アプリケーションを作成されている場合：** Delphi XE2 または C++Builder XE2 の Update 1 を使って FireMonkey 3D アプリケーションをビルドし直す必要があります。Update 1 をインストールしてソースをビルドし直すと、有効な再配布可能ライセンスがアプリケーションに含まれるようになります。

そういった経緯があるため、XE2 無印の使用はオススメしません。
:::


# おわりに

XE で搭載されなかった機能がこれでもかと言わんばかりに、このバージョンに追加されています。64bit Windows 用の実行形式バイナリも吐けるようになりました。

FireMonkey は 2D だけではなく 3D も使えるので、(使い所が難しいものの) 表現力を上げる事が可能になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8c6251c8-e3f8-4c94-3eae-768abb155164.png)

2011 年と言えば東日本大震災のあった年で、XE2 関連のイベントも余震の続く中で行なわれました。



**See also:**

 - [Delphi / C++Builder の新機能 (2007 以降) (Qiita)](https://qiita.com/ht_deko/items/23f51b4345f5d9ef14b1)
 - [「MS Help 2.x ランタイムがインストールされていない」というエラーを解消する (Qiita)](https://qiita.com/ht_deko/items/be1fb0aa801abbcdaa5c)
 - [【Delphi】WOW64 のリダイレクトを回避するには？ (Qiita)](https://qiita.com/ht_deko/items/039f03b08ec3f08995b3)
 - [Delphi XE2 の新しいリモートデバッガ - PAServer - (ht-deko.com)](https://ht-deko.com/tech071.html)
 - [続・続・ZIP で圧縮 / 解凍したい (Delphi XE2 以降) (ht-deko.com)](https://ht-deko.com/tech072.html)
 - [Delphi および C++ Builder における VCL Bitmap LoadFromFile の脆弱性について (Support Wiki)](https://docwiki.embarcadero.com/Support/ja/Delphi%E3%81%8A%E3%82%88%E3%81%B3C%2B%2BBuilder%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BVCL_Bitmap_LoadFromFile%E3%81%AE%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
 - [オフラインインストール用に登録コードを取得する（RAD Studio/Delphi/C++Builder 2009からXE5まで） (Support Wiki)](https://docwiki.embarcadero.com/Support/ja/%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E7%94%A8%E3%81%AB%E7%99%BB%E9%8C%B2%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%EF%BC%88RAD_Studio/Delphi/C%2B%2BBuilder_2009%E3%81%8B%E3%82%89XE5%E3%81%BE%E3%81%A7%EF%BC%89)
 - [手動アンインストール手順（RAD Studio XE2）(Supprt Wiki)](https://docwiki.embarcadero.com/Support/ja/%E6%89%8B%E5%8B%95%E3%82%A2%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%89%8B%E9%A0%86%EF%BC%88RAD_Studio_XE2%EF%BC%89)

# 索引
[ [← Delphi XE](https://qiita.com/ht_deko/items/5c9cee3ab5853ca459ef) ] [ [↑ 目次へ](https://qiita.com/ht_deko/items/eb96629d705542e3a980) ]  [ [→ Delphi XE3](https://qiita.com/ht_deko/items/8a1785bb278e6e691b29) ]

[^1]: だって、そんな面倒な事するくらいなら最初から『Lazarus (Free Pascal)』使うよね？