HPP 出力(Delphi)
Delphi コンパイラ指令のリスト:インデックス への移動
種類 |
パラメータ |
構文 |
{$HPPEMIT '文字列'} |
HPPEMIT 指令では、指定された文字列を、C++ 用に生成されたヘッダー ファイルに追加します。 例: {$HPPEMIT 'typedef double Weight;' }
)。 たとえ参照されている箇所がなくてもリンクしなければならないユニットがある場合、Delphi コードでは、常に HPPEMIT 指令を使用しなければなりません。 この場合、そのユニットから生成された HPP ヘッダーには、そのヘッダーが C++ ソース ファイルにインクルードされたとき、必ずこのユニットがリンクされるようになるいくつかのマクロが含まれています。
HPPEMIT 指令で指定された文字列は、ヘッダー ファイルの先頭の "ユーザー提供" セクションに、Delphi ファイルでの出現順に出力されます。
HPPEMIT 指令には、任意指定の END 指令を含めることができます。これは、文字列を .hpp ファイルの末尾に出力するようにコンパイラに指示するものです。 これが指定されない場合、文字列はファイルの先頭に出力されます。
例:
{$HPPEMIT 'Symbol goes to top of file'}
{$HPPEMIT END 'Symbol goes to bottom of file'}
モバイル プラットフォーム上での C++ の場合の #pragma link
の {$HPPEMIT LINKUNIT}
への置換
C++ アプリケーションの場合、{$HPPEMIT LINKUNIT}
が、モバイル プラットフォーム上の #pragma link
の代わりに置き換えられます。
Delphi ランタイムには、ある機能を有効にするにはリンクしなければならないユニットがあります。 C++ では、これまで、次の指令を使って自動リンクが実現されてきました:
{$HPPEMIT '#pragma link "<ユニット名>"'}
現在では、代わりに次の指令を使用しなければなりません:
{$HPPEMIT LINKUNIT}
C++ の名前空間宣言の生成
さらに、XE5 Update 2 で以下の 2 つの HPPEMIT 指令が新しく追加されました:
{$HPPEMIT OPENNAMESPACE}
- これは、現在のユニットの C++ 名前空間宣言を生成するものです。
- たとえば、FMX.Bind.Editors.pas ユニットで
{$HPPEMIT OPENNAMESPACE}
を使用した場合は、対応する .HPP ファイルに以下の内容が生成されます。
namespace Fmx
{
namespace Bind
{
namespace Editors
{
{$HPPEMIT CLOSENAMESPACE}
- これは、
{$HPPEMIT OPENNAMESPACE}
で宣言された名前空間に右中かっこを生成するものです。
- これは、
{$HPPEMIT NOUSINGNAMESPACE}
- これは、.PAS ユニットから生成された .HPP ファイルの末尾に典型的に見られる "using namespace <ユニット名>" を生成しないように Delphi コンパイラに指示するものです。 この指令は、グローバル名前空間の汚染を避けるのに使用でき、あいまいさを避けるうえでも非常に役に立ちます。 これと同じ効果は、DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE マクロを定義することで実現することができます。 ただし、後者では、コード(たとえば、IDE で生成されたイベント ハンドラのコード)で修飾名を使用しない場合に障害が発生するおそれがあります。