[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은 매개 변수이고 pcbOutachOut은 [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 종료되었는지 확인하도록 스텁을 지시합니다.