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

请注意,描述数组长度的参数以与数组相同的方向传输: cbInachIn 是 [in] 参数,而 httpOutachOut 是 [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 终止。