Matrices variables

En MIDL, las distintas matrices se fijan en tamaño. 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 la invocación a la invocación. Sin embargo, el tamaño de la matriz general es fijo.

Por ejemplo, en el ejemplo siguiente se muestra la definición de un procedimiento remoto en una interfaz de 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 usa el atributo MIDL [first_is] para 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 al procedimiento remoto MyRemoteProc dos veces. En la primera invocación, pasa los elementos de matriz numerados de 20 a 119, como se indica en los valores de las variables firstArrayElementNumber y totalElementsPassed. En la segunda llamada, el cliente pasa los elementos de matriz numerados de 120 a 319.