次の方法で共有


Application-Allocated バッファー

ACF 属性 [byte_count] は、クライアント サポート ルーチンによって割り当てられていない、または解放されていない事前割り当て済みバッファーを使用するようにスタブに指示します。 [byte_count] 属性は、バッファーを指すポインターまたは配列パラメーターに適用されます。 バッファー サイズをバイト単位で指定するパラメーターが必要です。

クライアント割り当てメモリ領域には、複数のポインターを持つ複雑なデータ構造を含めることができます。 メモリ領域は連続しているため、各ポインターと構造体を個別に解放するために、アプリケーションで複数の呼び出しを行う必要はありません。 [allocate(all_nodes)] 属性を使用する場合と同様に、メモリ割り当てルーチンまたは空きルーチンを 1 回呼び出すと、メモリ領域を割り当てたり解放したりできます。 ただし、[allocate(all_nodes)] 属性の使用とは異なり、buffer パラメーターはクライアント スタブではなくクライアント アプリケーションによって管理されます。

バッファーは [out] 専用パラメーターである必要があり、バッファーの長さ (バイト単位) は [in] 専用パラメーターである必要があります。 [byte_count] 属性はポインター型にのみ適用できます。 [byte_count] ACF 属性は、DCE IDL に対する Microsoft 拡張機能であり、MIDL /osf スイッチを使用してコンパイルする場合は使用できません。

次の例では、 pRoot パラメーターはバイト数を使用します。

/* function prototype in IDL file (fragment) */
void SortNames(
    [in] short cNames,
    [in, size_is(cNames)] STRINGTYPE pszArray[],
    [in] short cBytes,
    [out, ref] P_TREE_TYPE pRoot  /* tree with sorted data */
);

[byte_count] 属性は、ACF に次のように表示されます。

/* ACF file (fragment) */
SortNames([byte_count(cBytes)] pRoot);

これらの IDL ファイルと ACF ファイルから生成されたクライアント スタブは、このバッファーのメモリを割り当てたり解放したりしません。 サーバー スタブは、指定された size パラメーターを使用して、1 回の呼び出しでバッファーを割り当てて解放します。 指定したバッファー サイズに対してデータが大きすぎる場合は、例外が発生します。