Variabilní pole
V MIDL jsou různá pole pevná ve velikosti. Umožňují klientům předávat různé části polí z klientů na servery. Velikost části pole se může lišit při každém vyvolání. Velikost celkového pole je ale pevná.
Následující příklad například ukazuje definici vzdálené procedury v rozhraní v souboru MIDL. Velikost pole, které klient předává na server, je pevná konstantou ARRAY_SIZE. Rozhraní určuje část pole, kterou klient předává serveru v parametrech firstElement a 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. */
}
Definice rozhraní používá atribut MIDL [first_is] k určení indexu číslo prvního prvku v části pole, kterou klient předává na server. Atribut [length_is] určuje celkový počet prvků pole, které klient předává. Další informace o těchto MIDL atributech naleznete v tématu Array Attributes.
Následující fragment kódu ukazuje, jak může klient vyvolat vzdálenou proceduru definovanou v předchozím souboru MIDL.
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);
Tento fragment volá vzdálenou proceduru MyRemoteProc dvakrát. Při prvním vyvolání předá prvky pole číslovaných 20 až 119, jak naznačují hodnoty v proměnných firstArrayElementNumber a totalElementsPassed. Během druhého volání klient předá prvky pole číslované 120 až 319.