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]、[文字列]、および [ignore]。 複数の属性をコンマで区切ります。
-
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]、使用法属性 [string]、[ignore]、および [context_handle];ポインター属性 [ref]、[unique]、または [ptr];union 属性 [switch_type]。 複数のフィールド属性をコンマで区切ります。
-
function-attribute-list
-
関数に適用される 0 個以上の属性を指定します。 有効な関数属性は [callback], [local]; です。ポインター属性 [ref]、 [unique]、または [ptr];および使用法属性 [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];ポインター属性 [ref]、[unique]、または [ptr];と使用法属性 [context_handle] と [文字列]。 usage 属性 [ignore] を パラメーター属性として使用することはできません。 複数の属性をコンマで区切ります。
注釈
ポインター属性は、型属性として、構造体メンバー、共用体メンバー、またはパラメーターに適用されるフィールド属性として適用できます。または、関数の戻り値の型に適用される関数属性として使用します。 ポインター属性は 、[pointer_default] キーワードと共に表示することもできます。
参照ポインターには、次の特性があります。
- 常に有効なストレージをポイントします。値 NULL を持つことはありません。 参照ポインターは常に逆参照できます。
- 通話中に変更されることはありません。 参照ポインターは、呼び出しの前後に常にクライアント上の同じストレージを指します。
- クライアントに新しいメモリを割り当てません。 サーバーから返されたデータは、呼び出しの前に参照ポインターの値で指定された既存のストレージに書き込まれます。
- エイリアスは発生しません。 参照ポインターが指すStorageは、関数内の他の名前からは到達できません。
参照ポインターは、関数によって返されるポインターの型として使用できません。
最上位のポインター パラメーターに属性が指定されていない場合は、参照ポインターとして扱われます。
例
[unique] char * GetFirstName(
[in, ref] char * pszFullName);
関連項目