Compartilhar via


Matrizes variáveis

Em MIDL, matrizes variáveis são fixas em tamanho. Eles permitem que os clientes passem diferentes partes de matrizes de clientes para servidores. O tamanho da parte da matriz pode variar de invocação a invocação. No entanto, o tamanho da matriz geral é fixo.

Por exemplo, o exemplo a seguir mostra a definição de um procedimento remoto em uma interface em um arquivo MIDL. O tamanho da matriz que o cliente passa para o servidor é corrigido pela constante ARRAY_SIZE. A interface especifica a parte da matriz que o cliente passa para o servidor nos parâmetros firstElement e chunkSize.

[
    /*Attributes are defined here. */
]
interface MyInterface
{
    const long ARRAY_SIZE = 1000;

    MyRemoteProc(
        [in] long lFirstElement,
        [in] long lChunkSize,
        [in, first_is(lFirstElement), 
          length_is(lChunkSize)] char achArray[ARRAY_SIZE]
    );

    /* Other interface procedures are defined here. */
}

A definição de interface usa o atributo MIDL [first_is] para especificar o número de índice do primeiro elemento na parte da matriz que o cliente passa para o servidor. O atributo [length_is] especifica o número total de elementos de matriz que o cliente passa. Para obter mais informações sobre esses atributos MIDL, consulte Atributos de matriz.

O fragmento de código a seguir ilustra como um cliente pode invocar o procedimento remoto definido no arquivo MIDL anterior.

long lFirstArrayElementNumber = 20;
long lTotalElementsPassed = 100;
char achCharArray[ARRAY_SIZE];

// Code to store chars in the array goes here.

MyRemoteProc(
    lFirstArrayElementNumber ,
    lTotalElementsPassed , 
    achCharArray);

firstArrayElementNumber = 120;
totalElementsPassed = 200;

MyRemoteProc(
    lFirstArrayElementNumber ,
    lTotalElementsPassed , 
    achCharArray);

Esse fragmento chama o procedimento remoto MyRemoteProc duas vezes. Na primeira invocação, ele passa os elementos de matriz numerados de 20 a 119, conforme indicado pelos valores nas variáveis firstArrayElementNumber e totalElementsPassed. Na segunda chamada, o cliente passa os elementos de matriz numerados de 120 a 319.