Udostępnij za pośrednictwem


bufor Application-Allocated

Atrybut ACF [byte_count] kieruje wycinki do używania wstępnie przydzielonego buforu, który nie jest przydzielany lub zwalniany przez procedury pomocy technicznej klienta. Atrybut [byte_count] jest stosowany do wskaźnika lub parametru tablicy wskazującego na bufor. Wymaga parametru określającego rozmiar buforu w bajtach.

Przydzielony przez klienta obszar pamięci może zawierać złożone struktury danych z wieloma wskaźnikami. Ponieważ obszar pamięci jest ciągły, aplikacja nie musi wykonywać kilku wywołań, aby zwolnić każdy wskaźnik i strukturę pojedynczo. Tak jak w przypadku używania atrybutu [przydzielenia(all_nodes)] można przydzielić lub zwolnić obszar pamięci za pomocą jednego wywołania procedury alokacji pamięci lub wolnej procedury. Jednak w przeciwieństwie do atrybutu [allocate(all_nodes)] parametr buforu nie jest zarządzany przez łącznik klienta, ale przez aplikację kliencą.

Bufor musi być parametrem []-only, a długość buforu w bajtach musi być parametrem [w]-only. Atrybut [byte_count] można zastosować tylko do typów wskaźników. Atrybut [byte_count] ACF jest rozszerzeniem firmy Microsoft do języka IDL DCE i, w związku z tym, nie jest dostępny w przypadku kompilowania przy użyciu przełącznikaMIDL/osf.

W poniższym przykładzie parametr pRoot używa liczby bajtów:

/* 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 */
);

Atrybut [byte_count] jest wyświetlany w usłudze ACF jako:

/* ACF file (fragment) */
SortNames([byte_count(cBytes)] pRoot);

Wycinkę klienta wygenerowaną na podstawie tych plików IDL i ACF nie przydziela ani nie zwalnia pamięci dla tego buforu. Wycinkę serwera przydziela i zwalnia bufor w jednym wywołaniu przy użyciu podanego parametru rozmiaru. Jeśli dane są zbyt duże dla określonego rozmiaru buforu, zgłaszany jest wyjątek.