Attributs de tableau

Il existe une relation étroite entre les tableaux et les pointeurs dans le langage C. Lorsqu’il est passé en tant que paramètre à une fonction, un nom de tableau est traité comme un pointeur vers le premier élément du tableau, comme illustré dans l’exemple suivant :

/* fragment */
extern void f1(char * p1);

void main(void)
{
    char chArray[MAXSIZE];

    fLocal1(chArray);
}

Dans un appel local, vous pouvez utiliser le paramètre pointeur pour parcourir la mémoire et examiner le contenu d’autres adresses :

/* dump memory (fragment) */
void fLocal1(char * pch1)
{
    int i;

    for (i = 0; i < MAXSIZE; i++)
       printf("%c ", *pch1++);
}

Lorsqu’un client passe un pointeur vers une procédure distante, le stub client transmet à la fois le pointeur et les données vers laquelle il pointe. À moins que le pointeur ne soit limité à ses données correspondantes, toute la mémoire du client doit être transmise à chaque appel distant. En appliquant un typage fort dans la définition d’interface, MIDL limite le traitement du stub client aux données qui correspondent au pointeur spécifié.

La taille du tableau et la plage d’éléments de tableau transmis à l’ordinateur distant peuvent être constantes ou variables. Lorsque ces valeurs sont variables et donc déterminées au moment de l’exécution, vous devez utiliser des attributs dans le fichier IDL pour spécifier le nombre d’éléments de tableau à transmettre. Les attributs MIDL suivants prennent en charge les limites de tableau.

Attribut Description Default
[ first_is] Index du premier élément de tableau transmis. 0
[ last_is] Index du dernier élément de tableau transmis. -
[ length_is] Nombre total d’éléments de tableau transmis. -
[ max_is] Valeur d’index de tableau valide la plus élevée. -
[ min_is] Valeur d’index de tableau valide la plus basse. 0
[ size_is] Nombre total d’éléments de tableau alloués au tableau. -

 

Notes

L’attribut min_is n’est pas implémenté dans RPC. L’index de tableau minimal est toujours traité comme zéro.