[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] 参数,而 httpOut 和 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 终止。