Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O atributo ACF [byte_count] direciona os stubs para usar um buffer pré-alocado que não é alocado ou liberado pelas rotinas de suporte ao cliente. O atributo [byte_count] é aplicado a um parâmetro de ponteiro ou matriz que aponta para o buffer. Ele requer um parâmetro que especifica o tamanho do buffer em bytes.
A área de memória alocada pelo cliente pode conter estruturas de dados complexas com vários ponteiros. Como a área de memória é contígua, o aplicativo não precisa fazer várias chamadas para liberar cada ponteiro e estrutura individualmente. Como ao usar o atributo [alocar(all_nodes)], a área de memória pode ser alocada ou liberada com uma chamada para a rotina de alocação de memória ou para a rotina livre. No entanto, ao contrário de usar o atributo [allocate(all_nodes)], o parâmetro buffer não é gerenciado pelo stub do cliente, mas pelo aplicativo cliente.
O buffer deve ser um parâmetro [out]-only e o comprimento do buffer em bytes deve ser um parâmetro [in]-only. O atributo [byte_count] só pode ser aplicado a tipos de ponteiro. O atributo [byte_count] ACF é uma extensão da Microsoft para DCE IDL e, como tal, não está disponível se você compilar usando a opção deMIDL/osf.
No exemplo a seguir, o parâmetro pRoot usa contagem de bytes:
/* 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 */
);
O atributo [byte_count] aparece no ACF como:
/* ACF file (fragment) */
SortNames([byte_count(cBytes)] pRoot);
O stub do cliente gerado a partir desses arquivos IDL e ACF não aloca ou libera a memória para esse buffer. O stub do servidor aloca e libera o buffer em uma única chamada usando o parâmetro de tamanho fornecido. Se os dados forem muito grandes para o tamanho do buffer especificado, uma exceção será gerada.