Freigeben über


[in, size_is] und [out, size_is] Prototyp

Der folgende Funktionsprototyp verwendet zwei gezählte Zeichenfolgen. Der Entwickler muss Code sowohl auf dem Client als auch auf dem Server schreiben, um die Längen von Zeichenarrays und übergebenen Parametern nachzuverfolgen, die den Stubs mitteilen, wie viele Arrayelemente übertragen werden sollen.

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

Beachten Sie, dass die Parameter, die die Arraylänge beschreiben, in die gleiche Richtung wie die Arrays übertragen werden: cbIn und achIn sind [in]-Parameter, während pcbOut und achOut [out]-Parameter sind. Als [out] -Parameter muss der Parameter pcbOut der C-Konvention entsprechen und als Zeiger deklariert werden.

Der Clientcode zählt die Anzahl der Zeichen in der Zeichenfolge, einschließlich der nachfolgenden Null, bevor die Remoteprozedur wie gezeigt aufgerufen wird:

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

Die Remoteprozedur auf dem Server stellt die Länge des Rückgabepuffers in cbOut wie folgt bereit:

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

Das [string]-Attribut kann verwendet werden, wenn ein Parameter als Zeichenfolge bekannt ist. Dieses Attribut weist den Stub an, die Zeichenfolgengröße zu berechnen, wodurch der Mit den Parametern [länge ist] verknüpfte Mehraufwand beseitigt wird. Darüber hinaus leitet er den Stub an, um zu überprüfen, ob die Zeichenfolge NULL beendet ist, bevor der Parameter an die Anwendung übergeben wird.