Share via


複数レベルのポインター

複数のレベルのポインターがある場合、属性は変数名に最も近いポインターに関連付けられます。 クライアントは、応答に関連付けられているメモリを割り当てる責任を引き続き担います。

次の例では、スタブで、返されるデータの量を事前に知らずにサーバーを呼び出すことができます。

[
    uuid( ...),
    version(3.3),
]
interface AnInterface
{
    HRESULT GetBars([out] long * pSize,
             [out, size_is( , *pSize)]
             BAR ** ppBar);//BAR type defined elsewhere
}

この例では、スタブはサーバーに一意のポインターを渡します。このポインターは、サーバーが NULL に初期化します。 その後、サーバーは BAR のブロックを割り当て、ポインターを設定し、size 引数を設定して を返します。 サーバーが呼び出し元に影響を及ぼすには、データへの [一意] ポインターに [ref] ポインターを渡す必要があることに注意してください。 また、[size_is( , *pSize )] 内のコンマに注意してください。これは、最上位ポインターがサイズ変更されたポインターではなく、下位レベルのポインターであることを示します。

クライアント側では、スタブはリモート プロシージャを呼び出す前に *ppBar を NULL に設定します。 その後、スタブは BAR オブジェクトの arry を割り当ててアンマーシャリングします。 size 引数は、ブロックのサイズ (およびマーシャリングされていない BAR の数) を示します。 クライアントは、不要になった BAR オブジェクトの返された配列を解放する必要があります。

size_is