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.