Attributs de longueur, de taille et de direction
Lors de la transmission de tableaux entre le client et le serveur, les attributs liés à la taille [max_is] et [size_is] déterminent le nombre d’éléments de tableau alloués par le stub du serveur. Les attributs liés à la longueur [length_is], [first_is] et [last_is] déterminent le nombre d’éléments transmis au serveur et au client.
Différents attributs directionnels peuvent être appliqués aux paramètres. Toutefois, certaines combinaisons d’attributs directionnels peuvent provoquer des erreurs. Par exemple, supposons que vous écriviez une interface qui spécifie une procédure avec deux paramètres, un tableau et la longueur transmise du tableau. Le terme dir_attr fait référence à l’attribut directionnel appliqué au paramètre comme suit :
Proc1(
[dir_attr] short *plength;
[dir_attr, length_is(pLength)] short array[MAX_SIZE]);
Le comportement du compilateur MIDL pour chaque combinaison d’attributs directionnels est décrit dans le tableau suivant.
Array | Paramètre Length | Actions stub pendant l’appel du client au serveur | Actions stub lors du retour du serveur au client |
---|---|---|---|
[in] | [in] | Transmettez la longueur et le nombre d’éléments indiqués par le paramètre. | Aucune donnée transmise. |
[in] | [out] | Non légal; Erreur du compilateur MIDL. | Non légal; Erreur du compilateur MIDL. |
[in] | [in, out] | Transmettez la longueur et le nombre d’éléments indiqués par le paramètre length. | Transmettez la longueur uniquement. |
[out] | [in] | Transmettez la longueur. Si la taille du tableau est fixe, allouez la taille du tableau sur le serveur, mais ne transmettez aucun élément. Si la taille du tableau n’est pas liée, non légale : erreur du compilateur MIDL. |
Transmettez le nombre d’éléments indiqué par la longueur. Notez que la longueur peut être modifiée et peut avoir une valeur différente de la valeur sur le client. Ne transmettez pas la longueur. |
[out] | [out] | Allouez de l’espace pour le paramètre de longueur sur le serveur, mais ne transmettez pas le paramètre. Si la taille du tableau est fixe, allouez la taille du tableau sur le serveur, mais ne transmettez aucun élément. Si la taille du tableau n’est pas fixe, non légale : erreur du compilateur MIDL. |
Transmettez la longueur et le nombre d’éléments indiqués par la longueur définie par l’application serveur. |
[out] | [in, out] | Transmettez le paramètre length. Si la taille du tableau est liée, allouez la taille du tableau sur le serveur, mais ne transmettez aucun élément. Si la taille du tableau n’est pas liée, non légale : erreur du compilateur MIDL. |
Transmettez la longueur. Transmettez le nombre d’éléments de tableau indiqué par la longueur. |
[in, out] | [in] | Transmettez la longueur et le nombre d’éléments indiqués par le paramètre. | Ne transmettez pas la longueur. Transmettez le nombre d’éléments indiqué par la longueur. Notez que la longueur peut être modifiée et peut avoir une valeur différente de la valeur d’origine sur le client. |
[in, out] | [out] | Non légal; Erreur du compilateur MIDL. | Non légal; Erreur du compilateur MIDL. |
[in, out] | [in, out] | Transmettez la longueur et le nombre d’éléments indiqués par le paramètre. | Transmettez la longueur et le nombre d’éléments indiqués par le paramètre. |
En général, vous ne devez pas modifier les paramètres de longueur ou de taille côté serveur. Si vous modifiez le paramètre de longueur, vous pouvez orpheliner la mémoire. Pour plus d’informations, consultez Orphelin de la mémoire.