Top-Level和嵌入指针
若要了解如何在 Microsoft RPC 中分配指针及其关联的数据元素,必须区分 顶级指针 和 嵌入的指针。 引用不是顶级指针的所有指针的集合也很有用。
顶级指针 是指定为函数原型中参数名称的指针。 顶级指针及其引用始终在服务器上分配。
嵌入指针 是嵌入数据结构(如数组、结构和联合)中的指针。 如果嵌入的指针仅将输出写入缓冲区,并且输入时为 null,则服务器应用程序可以将其值更改为非 null。 在这种情况下,客户端存根会为此数据分配新内存。
如果在调用前客户端上嵌入的指针不为 null,则存根不会在返回时在客户端上分配内存。 相反,存根会尝试将与嵌入指针关联的内存写入到与该指针关联的客户端上的现有内存中,从而覆盖已有的数据。
注意
对于从缓冲区读取或写入缓冲区的数据,并且未指定缓冲区大小,输出长度必须小于或等于输入长度。 检测到溢出时,将引发 RPC 异常。 对于字符串数据,输出长度通过检查输入字符串的长度来确定。 因此,输出字符串不能超过输入字符串的长度。 最佳做法指导是通过始终包含大小指定的参数来指示缓冲区的大小来避免这种情况。
组合指针和方向属性中讨论了嵌入的只写指针。
术语 非顶点级指针 是指未在函数原型中指定为参数名称的所有指针,包括嵌入指针和多个嵌套指针级别。