string 特性
[string] 属性指示一维字符、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
-
指定应用于类型的一个或多个属性。 有效的类型属性包括 [handle]、 [switch_type]、 [transmit_as];指针属性 [ref]、 [unique]或 [ptr];和用法属性 [context_handle]、 [string]和 [ignore]。 用逗号分隔多个属性。
-
type-specifier
-
standard-declarator
-
指定标准 C 声明符,例如标识符、指针声明符或数组声明符。 有关详细信息,请参阅 数组和Sized-Pointer属性、 arrays.和 数组和指针。
-
declarator-list
-
指定标准 C 声明符,例如标识符、指针声明符和数组声明符。 有关详细信息,请参阅 数组和Sized-Pointer属性、 arrays.和 数组和指针。 declarator-list 由一个或多个用逗号分隔的声明符组成。 函数声明符中的参数名称标识符是可选的。
-
field-attribute-list
-
指定应用于结构、联合成员或函数参数的零个或多个字段属性。 两个有效的字段属性是 [max_is] 和 [size_is];用法属性 [string]、 [ignore] 和 [context_handle]、指针属性 [ref]、 [unique]或 [ptr]以及联合属性 [switch_type]。 用逗号分隔多个字段属性。
-
function-attribute-list
-
指定应用于函数的零个或多个属性。 有效的函数属性为 [callback]、 [local];指针属性 [ref]、 [unique]或 [ptr];和用法属性 [string]、 [ignore] 和 [context_handle]。
-
ptr-decl
-
指定 应用 [string] 属性的可选指针声明符。 指针声明符与 C 中使用的指针声明符相同;它由 * 指示符、修饰符(如 far)和限定符 const 构造。
-
function-name
-
指定远程过程的名称。
-
parameter-attribute-list
-
包含适用于指定参数类型的零个或多个属性。 参数属性可以采用方向属性 [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);