Condividi tramite


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