次の方法で共有


完全なポインター

一意 ポインターとは異なり、完全なポインターはエイリアスをサポートします。 つまり、次の図に示すように、複数のポインターが同じデータを参照できます。

同じデータする

完全なポインターには、次の特性があります。

  • 値が 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 パラメーターは、文字列への完全なポインターとして定義されています。 両方のポインターが、1 つの文字列を含む同じメモリ アドレスを指している可能性があります。

[ptr] は、エイリアスのサポートを提供するときに必要です。 ただし、RPC で使用できるすべてのポインターを最も多く処理する必要があるため、ほとんどのアプリケーションでは推奨されません。