буфер Application-Allocated
Атрибут ACF [byte_count] направляет заглушки на использование предварительно выделенного буфера, который не выделяется или освобождается подпрограммами поддержки клиентов. Атрибут [byte_count] применяется к параметру указателя или массива, который указывает на буфер. Для этого требуется параметр, указывающий размер буфера в байтах.
Выделенная клиентом область памяти может содержать сложные структуры данных с несколькими указателями. Так как область памяти является непрерывной, приложению не нужно выполнять несколько вызовов для освобождения каждого указателя и структуры по отдельности. Как и при использовании атрибута [выделения (all_nodes) ] область памяти можно выделить или освободить с помощью одного вызова подпрограммы выделения памяти или бесплатной подпрограммы. Однако в отличие от использования атрибута [allocate(all_nodes) ] буферный параметр не управляется заглушку клиента, но клиентским приложением.
Буфер должен быть параметром [вне]-only, а длина буфера в байтах должна быть [в]-only параметр. Атрибут [byte_count] можно применять только к типам указателей. Атрибут ACF [byte_count] является расширением Майкрософт для IDL DCE и, как это, недоступно, если вы компилируете с помощью переключателя MIDL /osf.
В следующем примере параметр pRoot использует число байтов:
/* 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 */
);
Атрибут [byte_count] отображается в ACF следующим образом:
/* ACF file (fragment) */
SortNames([byte_count(cBytes)] pRoot);
Заглушка клиента, созданная из этих файлов IDL и ACF, не выделяет или освобождает память для этого буфера. Заглушка сервера выделяет и освобождает буфер в одном вызове с помощью предоставленного параметра размера. Если данные слишком большие для указанного размера буфера, возникает исключение.