Matrices variables

En MIDL, las matrices variables tienen un tamaño fijo. Permiten a los clientes pasar diferentes partes de matrices de clientes a servidores. El tamaño de la parte de la matriz puede variar de invocación a invocación. Sin embargo, el tamaño de la matriz global es fijo.

Por ejemplo, en el ejemplo siguiente se muestra la definición de un procedimiento remoto en una interfaz en un archivo MIDL. El tamaño de la matriz que el cliente pasa al servidor se fija mediante la constante ARRAY _ SIZE. La interfaz especifica la parte de la matriz que el cliente pasa al servidor en los parámetros firstElement y 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. */
}

La definición de interfaz que usa primero el atributo MIDL es especificar el número de índice del primer elemento de la parte de la matriz que el cliente [ _ pasa ] al servidor. El [ atributo length _ is especifica el número total de elementos de ] matriz que pasa el cliente. Para obtener más información sobre estos atributos MIDL, vea Atributos de matriz.

En el fragmento de código siguiente se muestra cómo un cliente podría invocar el procedimiento remoto definido en el archivo 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);

Este fragmento llama dos veces al procedimiento remoto MyRemoteProc. En la primera invocación, pasa los elementos de matriz numerados de 20 a 119, tal y como indican los valores de las variables firstArrayElementNumber y totalElementsPassed. En la segunda llamada, el cliente pasa los elementos de matriz numerados de 120 a 319.