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 contigua, la aplicación no tiene que realizar varias llamadas para liberar cada puntero y estructura individualmente. Como cuando se usa 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 la aplicación cliente, sino la aplicación cliente.
El búfer debe ser un parámetro []-only y la longitud del búfer en bytes debe ser un parámetro [en]-only parámetro. El atributo [byte_count] solo se puede aplicar a los tipos de puntero. El atributo [byte_count] ACF es una extensión de Microsoft a DCE IDL y, como tal, no está disponible si compila con el modificador midl /osf.
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 el 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.