[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.