完整指针
与 唯一 指针不同,完整指针支持别名。 这意味着多个指针可以引用相同的数据,如下图所示:
完整指针具有以下特征:
- 它可以具有 null 值。
- 在调用期间,它可以从 null 更改为非 null。 当值更改为非 null 时,客户端存根会分配返回时分配的新内存。 客户端程序应在终止之前释放此内存。
- 在调用期间,它可以从非 null 更改为 null。 当值更改为 null 时,应用程序负责释放内存。
- 该值可以从一个非 null 值更改为另一个非 null 值。
- 整个指针指向的存储可由操作中的另一个指针或名称访问。
- 如果指针没有 null 值,则返回数据将写入现有存储中。
使用 [ ptr ] 属性指定完整的指针,如以下示例所示:
/* IDL file */
[
uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
version(1.0)
]
interface FullPtrInterface
{
void RemoteFn([in,ptr,string]) char *ptrName1,
[in,ptr,string] char *ptrName2);
}
在此示例中,参数 ptrName1 和 ptrName2 定义为指向字符串的完整指针。 两个指针都可能指向包含单个字符串的同一内存地址。
[ptr] 在提供别名支持时是必需的。 但是,由于它需要对 RPC 中可用的所有指针进行最多的处理,因此不建议对大多数应用程序使用。