RAD Studio 12.2 では、C++ にいくつかの大きな改善が施されています。その 1 つが動的パッケージ (BPL ファイル) の使用と作成の両方をサポートすることによって、いよいよ新しいWindows 64ビットモダンツールチェーンの完成です。
Table of Contents
動的パッケージのサポート
RAD Studio 12.1で新しいツールチェーンをリリースした際、VCLおよびFMXアプリケーションのビルドを完全にサポートし、静的ライブラリ、DLL、コンソールアプリケーションの使用や作成もサポートしました。しかし、VCLおよびFMXアプリケーションは、追加のメタデータを持つDLLの一種であるパッケージを多用します。12.1では、これらのパッケージは静的にリンクするしかありませんでした。その結果、実行ファイルが大きくなってしまいました。
12.2では、ご期待通り、パッケージへの動的リンクをサポートしています。これにより、より軽量で小さいサイズのEXEをビルドでき、BPLパッケージファイルとともに配布することができます。
これを有効にするのはとても簡単です。プロジェクトオプション > パッケージ > 実行時パッケージの「実行時パッケージを使ってリンク」にチェックを入れるだけです。
また同じくプロジェクトオプション> ビルド > C++ リンカ の「動的 RTL とリンクする」 にチェックを入れることも推奨します。これらは常に同期を保つ必要があります。内部的には、新しいツールチェーンは設定に関係なくパッケージを使用する際に動的 RTL が有効になるようにしていますが、両者が一致していることを確認することは良い習慣となります。
C++パッケージの作成
あまり使用されていないものの、依然として重要なパッケージ関連の機能として、C++ソースコードを使用してパッケージを作成することが挙げられます。
12.1では、静的リンクのみをサポートしていたため、この機能は存在しませんでした(パッケージへの静的リンクは、事実上、静的ライブラリへのリンクと実質的に同じでした)。現在では、動的パッケージの作成が可能になったため、C++ソースコードを使用したパッケージの作成もサポートしています。これには、 つのパッケージ プロジェクトで C++ と Delphi を混在させることも含まれます。
docwiki にパッケージに関する情報を掲載
パッケージは基本的にDelphiの概念ですが、C++でも利用できます。パッケージの動作や、パッケージ内のクラスの動作、またはdeclspec(package)キーワードを理解する方法について、よく質問を受けます。
12.2でパッケージをビルドする際には、まったく新しい実装を使用しており、これによって従来の Clang コンパイラでパッケージが実装されていた方法の技術的な問題も解決されました。主な問題は、ユニットの初期化と終了の順序に関するもので、ユニットがユニット間およびパッケージ間の依存関係を持つ場合、予期しないAVが発生する可能性がありました。この問題に対処するため、これらのシナリオが確実に動作するように、完全に新しい実装が採用されています。これに伴い、推奨されるベストプラクティスを含む、C++とパッケージに関する新しいDocWikiページがいくつか追加されました。
- 新しい C++ ツールチェーンのパッケージ – これはトピックの一般的なインデックスページです。サブページには以下が含まれます。
- ユニット初期化と終了 – パッケージのロードまたはアンロード時にユニットがどのように初期化および終了されるかを説明し、それが何を意味するのかについても説明しています。
- パッケージのインポートとエクスポート – これは最も重要なページの1 つです。ここでは、型がパッケージにインポートされる方法とタイミング、またはパッケージからエクスポートされる方法について説明します。パッケージの使用に関するほとんどの混乱は、この仕組みや対応方法が理解されていないことが原因です。このページでは、推奨されるベストプラクティスを提示しています。
- Weak Packaging ディレクティブの使用 – パッケージ内の弱くパッケージ化されたユニットはすでに文書化されていましたが、それは上記のページの概念と関連しており、より詳細な説明を記載しました。
ついに新しいC++ツールチェーンが完成!
動的パッケージのサポートにより、使用と作成の両方において、従来の Win64 ツールチェーンと完全に同等の機能が得られます。さらに新しいツールチェーンは、言語サポート、互換性、STL、リンカなど、すべてがより優れており、あらゆる面で大幅に改善されています。
このため、12.2では、新しいVCL、FMX、コンソールアプリケーション、新しいDLL、新しい静的ライブラリでは、新しいWindows 64ビットモダンプラットフォームがデフォルトのプラットフォームとなっており、こちらへの移行を推奨します。従来のWin64プラットフォームは、移行を支援するために引き続きインストールされ、並行して利用可能ですが、将来のリリースでは削除される予定です。新しいツールチェーンであるBcc64xは、将来だけでなく、現在も利用可能です!