ref 属性
[ref] 属性は、参照ポインターを識別します。 これは、単に間接参照のレベルを表すために使用されます。
pointer_default(ref)
typedef [ ref [[ , type-attribute-list ]] ] type-specifier declarator-list;
typedef [ struct | union ]
{
[ ref [[ , field-attribute-list ]] ] type-specifier declarator-list;
...}
[[ [ function-attribute-list ] ]] type-specifier [[ptr-decl]] function-name(
[ ref [[ , parameter-attribute-list ]] ] type-specifier [[standard-declarator]]
, ...);
パラメーター
-
type-attribute-list
-
型に適用される 1 つ以上の属性を指定します。 有効な型属性には 、[handle]、 [switch_type]、 [transmit_as]が含まれます。ポインター属性 [ref]、 [unique]、または [ptr];および使用法属性 [context_handle]、 [string]、および [ignore]。 複数の属性をコンマで区切ります。
-
type-specifier
-
基本型、構造体、共用体、または列挙型または型識別子を指定します。 オプションのストレージ仕様は 、type-specifier の前に置くことができます。
-
standard-declarator
-
識別子、ポインター宣言子、配列宣言子など、標準の C 宣言子を指定します。 詳細については、「 配列とSized-Pointer属性、 配列、配列と ポインター」を参照してください。
-
declarator-list
-
識別子、ポインター宣言子、配列宣言子などの標準 C 宣言子を指定します。 詳細については、「 配列とSized-Pointer属性、 配列、配列と ポインター」を参照してください。 declarator-list は、コンマで区切られた 1 つ以上の宣言子で構成されます。 関数宣言子のパラメーター名識別子は省略可能です。
-
field-attribute-list
-
構造体、共用体メンバー、または関数パラメーターに適用される 0 個以上のフィールド属性を指定します。 有効なフィールド属性には、[first_is]、[last_is]、[length_is]、[max_is]、[size_is];usage 属性 [string], [ignore], and [context_handle];pointer 属性 [ref]、[unique]、または [ptr];union 属性 [switch_type]。 複数のフィールド属性をコンマで区切ります。
-
function-attribute-list
-
関数に適用される 0 個以上の属性を指定します。 有効な関数属性は [callback], [local];pointer 属性 [ref]、 [unique]、または [ptr];および usage 属性 [string]、 [ignore]、および [context_handle]。
-
ptr-decl
-
[ref] 属性が適用されるポインター宣言子を少なくとも 1 つ指定します。 ポインター宣言子は、C で使用されるポインター宣言子と同じです。これは、 * 指定子、 far などの修飾子、および修飾子 const から構築 されます。
-
function-name
-
リモート プロシージャの名前を指定します。
-
parameter-attribute-list
-
指定したパラメーター型に適した 0 個以上の属性で構成されます。 パラメーター属性は、方向属性 [in] と [out] を受け取ることができます。フィールド属性 [first_is]、[last_is]、[length_is]、[max_is]、[size_is]、および [switch_type];pointer 属性 [ref]、[unique]、または [ptr];と 使用法属性 [context_handle] と [string]。 usage 属性 [ignore] を パラメーター属性として使用することはできません。 複数の属性をコンマで区切ります。
解説
ポインター属性は、構造体メンバー、共用体メンバー、またはパラメーターに適用されるフィールド属性として、型属性として適用できます。または、関数の戻り値の型に適用される関数属性として。 ポインター属性は、[pointer_default] キーワード (keyword)と共に表示することもできます。
参照ポインターには、次の特性があります。
- 常に有効なストレージを指します。値が NULL になることはありません。 参照ポインターは常に逆参照できます。
- 呼び出し中に変更されることはありません。 参照ポインターは、呼び出しの前後に常にクライアント上の同じストレージを指します。
- クライアントに新しいメモリを割り当てません。 サーバーから返されたデータは、呼び出しの前に参照ポインターの値で指定された既存のストレージに書き込まれます。
- エイリアシングは発生しません。 参照ポインターが指すストレージは、関数内の他の名前からは到達できません。
参照ポインターは、関数によって返されるポインターの型として使用できません。
最上位のポインター パラメーターに属性が指定されていない場合は、参照ポインターとして扱われます。
例
[unique] char * GetFirstName(
[in, ref] char * pszFullName);
関連項目