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 个字节,具体取决于是否使用 /robustNdrComputeConformance 函数计算的值是 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<> 是指向类型的说明。