属性の基本的なしくみ
プロジェクトに属性を挿入するには、3 つの方法があります。 まず、手動でソース コードに属性を挿入する方法があります。 また、プロジェクトでは、オブジェクトのプロパティ グリッドを使って属性を挿入できます。 さらに、さまざまなウィザードを使って属性を挿入する方法もあります。 [プロパティ] ウィンドウと各種ウィザードの使い方の詳細については、「Visual C++ プロジェクトの作成および管理」を参照してください。
Visual C++ .NET 以降のコンパイラは、ソース ファイルに含まれる属性を認識し、コンパイル時に動的に属性を解析して検査できます。
プロジェクトのビルド時には、これまでと同様に、コンパイラが各 C++ ソース ファイルを解析し、オブジェクト ファイルを生成します。 ただし、コンパイラは属性を検出すると、それを解析し、構文を検査します。 その後、コンパイラは属性プロバイダーを動的に呼び出して、コードの挿入やその他の変更をコンパイル時に行います。 プロバイダーの実装は、属性の種類によって異なります。 たとえば、ATL 関連の属性は、Atlprov.dll によって実装されます。
次の図は、コンパイラと属性プロバイダーの関係を表しています。
注意
属性を使用しても、ソース ファイルの内容は変更されません。 生成される属性のコードを認識できるのは、デバッグ セッションの間だけです。 また、プロジェクト内の各ソース ファイルに対して、属性を置換した結果を示すテキスト ファイルを生成できます。 この手順の詳細については、「/Fx (挿入されたコードのマージ)」および「挿入されたコードのデバッグ」を参照してください。
属性には、C++ のほとんどの構成体と同様に、適切な使用方法を定義する一連の特性があります。 この特性は属性のコンテキストと呼ばれ、各属性のリファレンス トピックにおいて、属性コンテキストの表で説明されています。 たとえば、coclass 属性を適用できるのは既存のクラスや構造体だけですが、cpp_quote 属性は C++ ソース ファイル内のどこにでも挿入できます。