次の方法で共有


完全なポインター

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

同じデータを参照する 2 つのポインター

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

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

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