Application-Allocated缓冲区
ACF 属性 [byte_count] 指示存根使用客户端支持例程未分配或释放的预分配缓冲区。 [byte_count] 属性应用于指向缓冲区的指针或数组参数。 它需要一个参数,该参数指定缓冲区大小(以字节为单位)。
客户端分配的内存区域可以包含具有多个指针的复杂数据结构。 由于内存区域是连续的,因此应用程序不必进行多次调用来单独释放每个指针和结构。 与使用 [allocate (all_nodes) ] 属性一样,可以通过调用内存分配例程或可用例程来分配或释放内存区域。 但是,与使用 [allocate (all_nodes) ] 属性不同,缓冲区参数不是由客户端存根管理,而是由客户端应用程序管理。
缓冲区必须是 [out]-only 参数,并且缓冲区长度(以字节为单位)必须是 [in]-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 文件生成的客户端存根不会为此缓冲区分配或释放内存。 服务器存根使用提供的 size 参数在单个调用中分配和释放缓冲区。 如果数据对于指定的缓冲区大小而言太大,则会引发异常。