Búfer de Application-Allocated
El atributo ACF [byte_count] dirige los códigos auxiliares para usar un búfer asignado previamente que no está asignado o liberado por las rutinas de soporte técnico del cliente. El atributo [byte_count] se aplica a un parámetro de puntero o matriz que apunta al búfer. Requiere un parámetro que especifique el tamaño del búfer en bytes.
El área de memoria asignada por el cliente puede contener estructuras de datos complejas con varios punteros. Dado que el área de memoria es contiguo, la aplicación no tiene que realizar varias llamadas para liberar cada puntero y estructura individualmente. Al usar el atributo [allocate(all_nodes)], el área de memoria se puede asignar o liberar con una llamada a la rutina de asignación de memoria o a la rutina libre. Sin embargo, a diferencia del uso del atributo [allocate(all_nodes)], el parámetro de búfer no lo administra el código auxiliar del cliente, sino la aplicación cliente.
El búfer debe ser un parámetro [out]-only y la longitud del búfer en bytes debe ser un parámetro [in]-only. El atributo [byte_count] solo se puede aplicar a los tipos de puntero. El atributo [byte_count] ACF es una extensión de Microsoft para DCE IDL y, como tal, no está disponible si compila mediante el modificador /osf MIDL.
En el ejemplo siguiente, el parámetro pRoot usa el recuento de bytes:
/* 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 */
);
El atributo [byte_count] aparece en ACF como:
/* ACF file (fragment) */
SortNames([byte_count(cBytes)] pRoot);
El código auxiliar de cliente generado a partir de estos archivos IDL y ACF no asigna ni libera la memoria para este búfer. El código auxiliar del servidor asigna y libera el búfer en una sola llamada mediante el parámetro de tamaño proporcionado. Si los datos son demasiado grandes para el tamaño de búfer especificado, se genera una excepción.