Compartir a través de


[in, size_is] y [out, size_is] Prototipo

El siguiente prototipo de función usa dos cadenas con recuento. El desarrollador debe escribir código tanto en el cliente como en el servidor para realizar un seguimiento de las longitudes de la matriz de caracteres y pasar parámetros que indiquen a los códigos auxiliares cuántos elementos de matriz se van a transmitir.

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

Tenga en cuenta los parámetros que describen la longitud de la matriz se transmiten en la misma dirección que las matrices: cbIn y achIn son parámetros [in] mientras que pcbOut y achOut son parámetros [out]. Como parámetro [out], el parámetro pcbOut debe seguir la convención C y declararse como puntero.

El código de cliente cuenta el número de caracteres de la cadena, incluido el cero final, antes de llamar al procedimiento remoto, como se muestra:

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

El procedimiento remoto en el servidor proporciona la longitud del búfer de retorno en cbOut como se muestra:

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

El atributo [string] se puede utilizar cuando se sabe que un parámetro es una cadena. Este atributo dirige el código auxiliar para calcular el tamaño de cadena, lo que elimina la sobrecarga asociada a los parámetros [length is]. Además, dirigirá el código auxiliar para comprobar que la cadena está terminada en NULL antes de pasar el parámetro a la aplicación.