属性の基本的なしくみ

プロジェクトに属性を挿入するには、3 つの方法があります。まず、手動でソース コードに属性を挿入する方法があります。また、プロジェクトでは、オブジェクトのプロパティ グリッドを使って属性を挿入できます。さらに、さまざまなウィザードを使って属性を挿入する方法もあります。[プロパティ] ウィンドウと各種ウィザードの使い方の詳細については、「Visual C++ プロジェクトの作成および管理」を参照してください。

Visual C++ .NET 以降のコンパイラは、ソース ファイルに含まれる属性を認識し、コンパイル時に動的に属性を解析して検査できます。

プロジェクトのビルド時には、これまでと同様に、コンパイラが各 C++ ソース ファイルを解析し、オブジェクト ファイルを生成します。ただし、コンパイラは属性を検出すると、それを解析し、構文を検査します。その後、コンパイラは属性プロバイダを動的に呼び出して、コードの挿入やその他の変更をコンパイル時に行います。プロバイダの実装は、属性の種類によって異なります。たとえば、ATL 関連の属性は、Atlprov.dll によって実装されます。

次の図は、コンパイラと属性プロバイダの関係を表しています。

コンポーネント属性コミュニケーション グラフィック

w3yk4x9b.alert_note(ja-jp,VS.90).gifメモ :

属性を使用しても、ソース ファイルの内容は変更されません。生成される属性のコードを認識できるのは、デバッグ セッションの間だけです。また、プロジェクト内の各ソース ファイルに対して、属性を置換した結果を示すテキスト ファイルを生成できます。この手順の詳細については、「/Fx (挿入されたコードのマージ)」および「挿入されたコードのデバッグ」を参照してください。

属性には、C++ のほとんどの構成体と同様に、適切な使用方法を定義する一連の特性があります。この特性は属性のコンテキストと呼ばれ、各属性のリファレンス トピックにおいて、属性コンテキストの表で説明されています。たとえば、coclass 属性を適用できるのは既存のクラスや構造体だけですが、cpp_quote 属性は C++ ソース ファイル内のどこにでも挿入できます。

参照

概念

属性付きプログラミングの概念