Application-Allocated buffert
ACF-attributet [byte_count] instruerar stubs att använda en förallokerad buffert som inte allokeras eller frigörs av klientsupportrutinerna. Attributet [byte_count] tillämpas på en pekare eller matrisparameter som pekar på bufferten. Den kräver en parameter som anger buffertstorleken i byte.
Det klientallokerade minnesområdet kan innehålla komplexa datastrukturer med flera pekare. Eftersom minnesområdet är sammanhängande behöver programmet inte göra flera anrop för att frigöra varje pekare och struktur individuellt. Som när du använder attributet [allocate(all_nodes)] kan minnesområdet allokeras eller frigöras med ett anrop till minnesallokeringsrutinen eller den kostnadsfria rutinen. Till skillnad från att använda attributet [allocate(all_nodes)] hanteras buffertparametern inte av klientens stub utan av klientprogrammet.
Bufferten måste vara en [ut]-only parameter och buffertlängden i byte måste vara en [i]-only parameter. Attributet [byte_count] kan bara tillämpas på pekartyper. ACF-attributet [byte_count] är ett Microsoft-tillägg till DCE IDL och är därför inte tillgängligt om du kompilerar med växeln MIDL /osf.
I följande exempel använder parametern pRoot byteantal:
/* 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 */
);
Attributet [byte_count] visas i ACF som:
/* ACF file (fragment) */
SortNames([byte_count(cBytes)] pRoot);
Klientstuben som genereras från dessa IDL- och ACF-filer allokerar eller frigör inte minnet för den här bufferten. Serverns stub allokerar och frigör bufferten i ett enda anrop med hjälp av den angivna storleksparametern. Om data är för stora för den angivna buffertstorleken utlöses ett undantag.