Tableaux variables

Dans MIDL, la taille de différents tableaux est fixe. Ils permettent aux clients de transmettre différentes parties de tableaux des clients aux serveurs. La taille de la partie du tableau peut varier d’un appel à l’autre. Toutefois, la taille du tableau global est fixe.

Par instance, l’exemple suivant montre la définition d’une procédure distante dans une interface dans un fichier MIDL. La taille du tableau que le client transmet au serveur est fixe par la constante ARRAY_SIZE. L’interface spécifie la partie du tableau que le client passe au serveur dans les paramètres firstElement et 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 définition d’interface utilise l’attribut MIDL [first_is] pour spécifier le numéro d’index du premier élément dans la partie du tableau que le client transmet au serveur. L’attribut [length_is] spécifie le nombre total d’éléments de tableau que le client transmet. Pour plus d’informations sur ces attributs MIDL, consultez Attributs de tableau.

Le fragment de code suivant illustre comment un client peut appeler la procédure distante définie dans le fichier MIDL précédent.

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);

Ce fragment appelle la procédure distante MyRemoteProc deux fois. Lors du premier appel, il transmet les éléments de tableau numérotés de 20 à 119, comme indiqué par les valeurs des variables firstArrayElementNumber et totalElementsPassed. Lors du deuxième appel, le client transmet les éléments de tableau numérotés de 120 à 319.