文字列属性
[string] 属性は、1 次元の char、wchar_t、バイト (または同等の) 配列、またはこのような配列へのポインターを文字列として扱う必要があることを示します。 文字列には、フィールドがすべて バイト型であるコンストラクトの配列 (または配列へのポインター) を指定することもできます。
typedef [ string [[ , type-attribute-list ]] ] type-specifier declarator-list;
typedef [ struct | union ]
{
[ string [[ , field-attribute-list ]] ] type-specifier declarator-list;
...
};
[ string [[ , function-attribute-list ]] ] type-specifier ptr-decl function-name(
[[ [ parameter-attribute-list ] ]] type-specifier [[standard-declarator]]
, ...);
[[ [ function-attribute-list ] ]] type-specifier [[ptr-decl]] function-name(
[ string [[ , parameter-attribute-list ]] ] type-specifier [[standard-declarator]]
, ...);
パラメーター
-
type-attribute-list
-
型に適用される 1 つ以上の属性を指定します。 有効な型属性には、[handle]、[switch_type]、[transmit_as]が含まれます。ポインター属性 [ref]、[unique]、または [ptr];と usage 属性 [context_handle]、[string]、および [ignore]。 複数の属性をコンマで区切ります。
-
type-specifier
-
standard-declarator
-
識別子、ポインター宣言子、配列宣言子などの標準 C 宣言子を指定します。 詳細については、「 配列とSized-Pointer属性、 配列」、および 「配列とポインター」を参照してください。
-
declarator-list
-
識別子、ポインター宣言子、配列宣言子など、標準の C 宣言子を指定します。 詳細については、「 配列とSized-Pointer属性、 配列」、および 「配列とポインター」を参照してください。 declarator-list は、コンマで区切られた 1 つ以上の宣言子で構成されます。 関数宣言子のパラメーター名識別子は省略可能です。
-
field-attribute-list
-
構造体、共用体メンバー、または関数パラメーターに適用される 0 個以上のフィールド属性を指定します。 2 つの有効なフィールド属性は [max_is] と [size_is]です。使用法属性 [string]、 [ignore]、および [context_handle]、ポインター属性 [ref]、 [unique]、または [ptr]、union 属性 [switch_type]。 複数のフィールド属性をコンマで区切ります。
-
function-attribute-list
-
関数に適用される 0 個以上の属性を指定します。 有効な関数属性は [callback], [local];ポインター属性 [ref]、 [unique]、または [ptr];および usage 属性 [string]、 [ignore]、および [context_handle]。
-
ptr-decl
-
[string] 属性が適用される省略可能なポインター宣言子を指定します。 ポインター宣言子は、C で使用されるポインター宣言子と同じです。これは、 * 指定子、 far などの修飾子、および修飾子 const から構築 されます。
-
function-name
-
リモート プロシージャの名前を指定します。
-
parameter-attribute-list
-
指定したパラメーター型に適した 0 個以上の属性で構成されます。 パラメーター属性は、方向属性 [in] と [out] を受け取ることができます。フィールド属性 [max_is] と [size_is];ポインター属性 [ref]、 [unique]、または [ptr];と 使用法属性 [context_handle] と [string]。 usage 属性 [ignore] は パラメーター属性として使用できません。 複数の属性をコンマで区切ります。
解説
実行時に境界が決定される配列で [string] 属性を使用する場合は、次の例のように 、[size_is] または [max_is] 属性も指定する必要があります。
/* a string that can hold up to MAX_STRING_LENGTH characters */
typedef [string, max_is(MAX_STRING_LENGTH)] char line[];
[string] 属性は、[first_is]、[last_is]、[length_is] など、送信される要素の範囲を指定する属性では使用できません。
多次元配列で使用する場合、[ string] 属性は右端の配列に適用されます。
カウントされる文字列を定義するには、[ string] 属性を使用しないでください。 次のような文字配列または文字ベースのポインターを使用します。
typedef struct
{
unsigned short size;
unsigned short length;
[size_is(size), length_is(length)] char string[*];
} counted_string;
[string] 属性は、スタブで言語指定のメソッドを使用して文字列の長さを決定することを指定します。
C で文字列を宣言する場合は、文字列の末尾をマークする余分な文字にスペースを割り当てる必要があります。
例
/* a string type that can hold up to 80 characters */
typedef [string] char line[81];
HRESULT Proc1([in, string] char * pszName);
関連項目