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> 可以包含下表所示的任何标志。
Attribute | 标志 | 说明 |
---|---|---|
01 | FC_ALLOCATE_ALL_NODES | 指针是分配 (all_nodes) 分配方案的一部分。 |
02 | FC_DONT_FREE | 分配 (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<> 是指向类型的说明。