Partager via


[in, size_is] et [out, size_is] Prototype

Le prototype de fonction suivant utilise deux chaînes comptées. Le développeur doit écrire du code sur le client et le serveur pour suivre les longueurs du tableau de caractères et transmettre les paramètres qui indiquent aux stubs le nombre d’éléments de tableau à transmettre.

void Analyze(
    [in,  length_is(cbIn), size_is(STRSIZE)]    char  achIn[],
    [in]                                        long  cbIn,
    [out, length_is(*pcbOut), size_is(STRSIZE)] char  achOut[],
    [out]                                       long *pcbOut);

Notez que les paramètres qui décrivent la longueur du tableau sont transmis dans la même direction que les tableaux : cbIn et achIn sont des paramètres [in] tandis que pcbOut et achOut sont des paramètres [out]. En tant que paramètre [out], le paramètre pcbOut doit suivre la convention C et être déclaré en tant que pointeur.

Le code client compte le nombre de caractères dans la chaîne, y compris le zéro de fin, avant d’appeler la procédure distante comme indiqué :

/* client */
char achIn[STRSIZE], achOut[STRSIZE];
long cbIn, cbOut;
...
gets_s(achIn, STRSIZE);                   // get patient input
cbIn = strlen(achIn) + 1;      // transmitted elements
Analyze(achIn, cbIn, achOut, &cbOut);

La procédure distante sur le serveur fournit la longueur de la mémoire tampon de retour dans cbOut , comme indiqué :

/* server */
void Analyze(char *pchIn,
             long cbIn,
             char *pchOut,
             long *pcbOut)
{
   ...
   *pcbOut = strlen(pchOut) + 1; // transmitted elements
   return;
}

L’attribut [string] peut être utilisé lorsqu’un paramètre est connu pour être une chaîne. Cet attribut indique au stub de calculer la taille de chaîne, éliminant ainsi la surcharge associée aux paramètres [length is]. En outre, il dirige le stub pour vérifier que la chaîne est terminée par null avant de passer le paramètre à l’application.