Megosztás a következőn keresztül:


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.