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 回の呼び出しでバッファーを割り当てて解放します。 指定したバッファー サイズに対してデータが大きすぎる場合は、例外が発生します。