指针 (RPC)
常见指针
公共指针定义为接口指针和字节计数指针以外的所有内容。
说明有两种可能的布局:
pointer_type<1> pointer_attributes<1>
simple_type<1> FC_PAD
–或–
pointer_type<1> pointer_attributes<1>
offset_to_complex_description<2>
如果指针是指向简单类型或非化字符串指针的指针,则使用第一种格式。 第二种格式用于指向所有其他类型的指针。 指针属性指示它具有FC_SIMPLE_POINTER标志的说明布局。
pointer_type<1> 是以下项之一。
设置字符格式 | 描述 |
---|---|
FC_RP | 引用指针。 |
FC_UP | 唯一指针。 |
FC_FP | 完整指针。 |
FC_OP | 对象接口中的唯一指针。 |
区分FC_OP的原因是语义:在对象接口中,在取消合并新对象并分配新指针值之前,应释放 [in,out] 指针。
Pointer_attributes<1> 可以具有下表中显示的任何标志。
属性 | 旗 | 描述 |
---|---|---|
01 | FC_ALLOCATE_ALL_NODES | 指针是分配(all_nodes)分配方案的一部分。 |
02 | FC_DONT_FREE | allocate(dont_free) 指针。 |
04 | FC_ALLOCED_ON_STACK | 一个指针,其引用在存根堆栈上分配。 |
08 | FC_SIMPLE_POINTER | 指向简单类型或不符合要求的字符串的指针。 要设置的此标志指示指针说明的布局作为上述简单指针布局,否则指示带偏移量的描述符格式。 |
10 | FC_POINTER_DEREF | 在处理指针的引用之前,必须取消引用的指针。 |
应用的指针具有size_is()、max_is()、length_is()、last_is()和/或first_is()的指针,其格式字符串说明与指向适当类型的数组的指针完全相同(例如,如果应用size_is(),则应用一个符合性数组(如果应用size_is()和length_is)。
接口指针
对象接口指针格式字符串具有两种格式之一,具体取决于编译器是否知道相应的 IID。
具有常量 IID 的接口指针具有以下说明:
FC_IP FC_CONSTANT_IID
iid<16>
iid<16> 部分是接口指针的实际 IID。 iid 以与 GUID 数据结构相同的格式写入格式字符串:long、short、short、char [8]。
应用了 iid_is() 的接口指针的说明为:
FC_IP FC_PAD
iid_description<>
iid_description<>是一个关联描述符,具有 4 或 6 个字节,具体取决于是否使用了 /robust。 NdrComputeConformance 函数计算的值是 IID 指针。
字节计数指针
字节计数指针与名为 [byte_count] 的特殊优化属性相关。 使用以下格式:
FC_BYTE_COUNT_POINTER
simple_type<1>
byte_count_description<>
–和–
FC_BYTE_COUNT_POINTER
FC_PAD
byte_count_description<>
pointee_description<>
byte_count_description<>是一个相关描述符,具有 4 或 6 个字节,具体取决于是否使用 /robust。
pointee_description<>是指向类型的说明。