Változó tömbök
A MIDL-ben a változó méretű tömbök rögzítve vannak. Lehetővé teszik az ügyfelek számára a tömbök különböző részeinek átadását az ügyfelektől a kiszolgálókig. A tömbrész mérete minden egyes meghívásnál változhat. A teljes tömb mérete azonban rögzített.
Az alábbi példa például egy MIDL-fájl felületének távoli eljárásdefinícióját mutatja be. Az ügyfél által a kiszolgálónak átadandó tömb méretét az állandó ARRAY_SIZE rögzíti. Az interfész a tömb azon részét adja meg, amelyet az ügyfél a firstElement és a chunkSize paraméterekben továbbít a kiszolgálónak.
[
/*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 felületdefiníció a MIDL attribútum [first_is] használatával adja meg a tömb azon részének első elemének indexszámát, amelyet az ügyfél átad a kiszolgálónak. A [length_is] attribútum az ügyfél által áthaladó tömbelemek teljes számát adja meg. További információ ezekről a MIDL-attribútumokról: Tömbattribútumok.
Az alábbi kódrészlet bemutatja, hogyan hívhatja meg egy ügyfél az előző MIDL-fájlban definiált távoli eljárást.
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);
Ez a töredék kétszer hívja meg a MyRemoteProc távoli eljárást. Az első meghívás során a 20 és 119 között számozott tömbelemeket adja át az elsőArrayElementNumber és totalElementsPassed változó értékeinek megfelelően. A második hívás során az ügyfél átadja a 120 és 319 között számozott tömbelemeket.