[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은 매개 변수이고 pcbOut 및 achOut은 [out] 매개 변수입니다. [out] 매개 변수인 pcbOut 매개 변수는 C 규칙을 따라 포인터로 선언되어야 합니다.
클라이언트 코드는 다음과 같이 원격 프로시저를 호출하기 전에 후행 0을 포함하여 문자열의 문자 수를 계산합니다.
/* 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 종료되었는지 확인하도록 스텁을 지시합니다.