Application-Allocated puffer
Az ACF attribútum [byte_count] arra utasítja a csonkokat, hogy olyan előre lefoglalt puffert használjanak, amelyet az ügyféltámogatási rutinok nem foglalnak le vagy szabadítanak fel. A [byte_count] attribútumot a rendszer a pufferre mutató mutató vagy tömbparaméterre alkalmazza. Ehhez olyan paraméterre van szükség, amely bájtban adja meg a puffer méretét.
Az ügyfél által lefoglalt memóriaterület több mutatóval rendelkező összetett adatstruktúrákat tartalmazhat. Mivel a memóriaterület egybefüggő, az alkalmazásnak nem kell több hívást kezdeményeznie az egyes mutatók és szerkezetek egyenkénti felszabadításához. A [allocate(all_nodes)] attribútum használatakor a memóriaterület lefoglalható vagy felszabadítható a memóriafoglalási rutin vagy az ingyenes rutin egyetlen hívásával. A [allocate(all_nodes)] attribútumtól eltérően azonban a pufferparamétert nem az ügyfélcsomó, hanem az ügyfélalkalmazás kezeli.
A puffernek csak []-only paraméternek kell lennie, és a bájtokban lévő pufferhossznak [kell lennie]-only paraméterben. A [byte_count] attribútum csak mutatótípusokra alkalmazható. Az [byte_count] ACF attribútum a DCE IDL Microsoft-bővítménye, ezért nem érhető el, ha a MIDL /osf kapcsolóval fordítja le.
A következő példában a pRoot paraméter bájtszámot használ:
/* 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 */
);
A [byte_count] attribútum az ACF-ben a következő módon jelenik meg:
/* ACF file (fragment) */
SortNames([byte_count(cBytes)] pRoot);
Az ezekből az IDL- és ACF-fájlokból létrehozott ügyfélcsomó nem foglalja le vagy szabadít fel memóriát ehhez a pufferhez. A kiszolgálói csonk egyetlen hívásban lefoglalja és felszabadítja a puffert a megadott méretparaméter használatával. Ha az adatok túl nagyok a megadott puffermérethez, kivétel keletkezik.