Compartilhar via


Atributos de comprimento, tamanho e direção

Ao passar matrizes entre o cliente e o servidor, os atributos relacionados ao tamanho [max_is] e [size_is] determinam quantos elementos de matriz o stub do servidor aloca. Os atributos relacionados ao comprimento [length_is], [first_is] e [last_is] determinam quantos elementos são transmitidos ao servidor e ao cliente.

Atributos direcionais diferentes podem ser aplicados a parâmetros. No entanto, algumas combinações de atributos direcionais podem causar erros. Por exemplo, suponha que você esteja escrevendo uma interface que especifica um procedimento com dois parâmetros, uma matriz e o comprimento transmitido da matriz. O termo dir_attr refere-se ao atributo direcional aplicado ao parâmetro como:

Proc1(
    [dir_attr] short *plength;
    [dir_attr, length_is(pLength)] short array[MAX_SIZE]);

O comportamento do compilador MIDL para cada combinação de atributos direcionais é descrito na tabela a seguir.

Array Parâmetro length Ações de stub durante a chamada de cliente para servidor Ações de stub no retorno do servidor para o cliente
[in] [in] Transmita o comprimento e o número de elementos indicados pelo parâmetro . Nenhum dado transmitido.
[in] [out] Não é legal; Erro do compilador MIDL. Não é legal; Erro do compilador MIDL.
[in] [in, out] Transmita o comprimento e o número de elementos indicados pelo parâmetro length. Transmita somente o comprimento.
[out] [in] Transmita o comprimento.
Se o tamanho da matriz for fixo, aloque o tamanho da matriz no servidor, mas não transmita nenhum elemento.
Se o tamanho da matriz não estiver associado, não será legal: erro do compilador MIDL.
Transmita o número de elementos indicados pelo comprimento.
Observe que o comprimento pode ser alterado e pode ter um valor diferente do valor no cliente. Não transmita o comprimento.
[out] [out] Aloque espaço para o parâmetro de comprimento no servidor, mas não transmita o parâmetro . Se o tamanho da matriz for fixo, aloque o tamanho da matriz no servidor, mas não transmita nenhum elemento.
Se o tamanho da matriz não for fixo, não será legal: erro do compilador MIDL.
Transmita o comprimento e o número de elementos indicados pelo comprimento, conforme definido pelo aplicativo do servidor.
[out] [in, out] Transmita o parâmetro de comprimento. Se o tamanho da matriz estiver associado, aloque o tamanho da matriz no servidor, mas não transmita nenhum elemento.
Se o tamanho da matriz não estiver associado, não será legal: erro do compilador MIDL.
Transmita o comprimento. Transmita o número de elementos de matriz indicados pelo comprimento.
[in, out] [in] Transmita o comprimento e o número de elementos indicados pelo parâmetro . Não transmita o comprimento. Transmita o número de elementos indicados pelo comprimento.
Observe que o comprimento pode ser alterado e pode ter um valor diferente do valor original no cliente.
[in, out] [out] Não é legal; Erro do compilador MIDL. Não é legal; Erro do compilador MIDL.
[in, out] [in, out] Transmita o comprimento e o número de elementos indicados pelo parâmetro . Transmita o comprimento e o número de elementos indicados pelo parâmetro .

Em geral, você não deve modificar os parâmetros de tamanho ou comprimento no lado do servidor. Se você alterar o parâmetro de comprimento, poderá criar memória órfã. Para obter mais informações, consulte Memory Orphaning.