Compartilhar via


[in, size_is] e [out, size_is] Protótipo

O protótipo de função a seguir usa duas cadeias de caracteres contadas. O desenvolvedor deve escrever código no cliente e no servidor para acompanhar os comprimentos da matriz de caracteres e passar parâmetros que informam aos stubs quantos elementos de matriz devem ser transmitidos.

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

Observe que os parâmetros que descrevem o comprimento da matriz são transmitidos na mesma direção que as matrizes: cbIn e achIn são parâmetros [in] enquanto pcbOut e achOut são parâmetros [out]. Como um parâmetro [out] , o parâmetro pcbOut deve seguir a convenção C e ser declarado como um ponteiro.

O código do cliente conta o número de caracteres na cadeia de caracteres, incluindo o zero à direita, antes de chamar o procedimento remoto, conforme mostrado:

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

O procedimento remoto no servidor fornece o comprimento do buffer de retorno no cbOut , conforme mostrado:

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

O atributo [string] pode ser utilizado quando um parâmetro é conhecido por ser uma cadeia de caracteres. Esse atributo direciona o stub para calcular o tamanho da cadeia de caracteres, eliminando assim a sobrecarga associada aos parâmetros [length is]. Além disso, ele direcionará o stub para verificar se a cadeia de caracteres é nula encerrada antes de passar o parâmetro para o aplicativo.