完整指针

唯一 指针不同,完整指针支持别名。 这意味着多个指针可以引用相同的数据,如下图所示:

引用相同数据的两个指针

完整指针具有以下特征:

  • 它可以具有 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);
}

在此示例中,参数 ptrName1ptrName2 定义为指向字符串的完整指针。 两个指针都可能指向包含单个字符串的同一内存地址。

[ptr] 在提供别名支持时是必需的。 但是,由于它需要对 RPC 中可用的所有指针进行最多的处理,因此不建议对大多数应用程序使用。