[in, size_is] e [out, size_is] Prototipo
Il prototipo di funzione seguente usa due stringhe conteggiate. Lo sviluppatore deve scrivere codice sia sul client che sul server per tenere traccia delle lunghezze della matrice di caratteri e passare i parametri che indicano agli stub il numero di elementi della matrice da trasmettere.
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);
Si noti che i parametri che descrivono la lunghezza della matrice vengono trasmessi nella stessa direzione delle matrici: cbIn e achIn sono parametri [in] mentre pcbOut e achOut sono parametri [out]. Come parametro [out] il parametro pcbOut deve seguire la convenzione C e essere dichiarato come puntatore.
Il codice client conta il numero di caratteri nella stringa, incluso lo zero finale, prima di chiamare la procedura remota, come illustrato di seguito:
/* 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 procedura remota nel server fornisce la lunghezza del buffer restituito in cbOut , come illustrato di seguito:
/* server */
void Analyze(char *pchIn,
long cbIn,
char *pchOut,
long *pcbOut)
{
...
*pcbOut = strlen(pchOut) + 1; // transmitted elements
return;
}
L'attributo [string] può essere usato quando un parametro è noto come stringa. Questo attributo indirizza lo stub per calcolare le dimensioni della stringa, eliminando così il sovraccarico associato ai parametri [length is] . Verrà inoltre diretto lo stub per verificare che la stringa sia terminata con NULL prima di passare il parametro all'applicazione.