完整指標

不同于 唯一 指標,完整指標支援別名。 這表示多個指標可以參考相同的資料,如下圖所示:

參考相同資料的兩個指標

完整指標具有下列特性:

  • 它可以有 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 中所有可用指標的最多處理,因此不建議大部分的應用程式使用。