[in, size_is] 和 [out, size_is] 原型
下列函式原型使用兩個計算的字串。 開發人員必須在用戶端和伺服器上撰寫程式碼,以追蹤字元陣列長度,並傳遞參數,告知存根要傳輸的陣列元素數目。
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);
請注意,描述陣列長度的參數會以與陣列相同的方向傳輸: cbIn 和 achIn 是 [in] 參數,而 cbOut 和 achOut 是 [out] 參數。 做為 [out] 參數, 參數必須 遵循 C 慣例,並宣告為指標。
用戶端程式代碼會計算字串中的字元數,包括尾端零,再呼叫遠端程式,如下所示:
/* 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);
伺服器上的遠端程式會在 cbOut 中提供傳回緩衝區的長度,如下所示:
/* server */
void Analyze(char *pchIn,
long cbIn,
char *pchOut,
long *pcbOut)
{
...
*pcbOut = strlen(pchOut) + 1; // transmitted elements
return;
}
當已知參數為字串時,可以使用 [string] 屬性。 這個屬性會指示存根計算字串大小,因而消除與 [length is] 參數相關聯的額外負荷。 此外,它會指示存根確認字串在將 參數傳遞至應用程式之前,先終止 Null 。