完全なポインター
一意のポインターとは異なり、完全なポインターはエイリアシングをサポートします。 つまり、次の図に示すように、複数のポインターが同じデータを参照できます。
完全なポインターには、次の特性があります。
- 値は 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 で使用できるすべてのポインターの処理が最も多いため、ほとんどのアプリケーションでは推奨されません。