次の方法で共有


Application-Allocated バッファー

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

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

バッファーは [out]-only パラメーターである必要があり、バッファーの長さ (バイト単位) は []-only パラメーターの [である必要があります。 [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 ファイルから生成されたクライアント スタブは、このバッファーのメモリを割り当てたり解放したりしません。 サーバー スタブは、指定されたサイズ パラメーターを使用して、1 回の呼び出しでバッファーを割り当てて解放します。 指定したバッファー サイズに対してデータが大きすぎる場合は、例外が発生します。