다음을 통해 공유


방향(매개 변수) 특성

방향 특성은 데이터가 클라이언트에서 서버로 전송되는지, 서버에서 클라이언트로 또는 둘 다 전송되는지를 설명합니다. 함수 프로토타입의 모든 매개 변수는 방향 특성과 연결되어야 합니다. 방향 특성의 세 가지 가능한 조합은 1) [in], 2) [out], 3) [in, out]입니다. 호출 프로시저와 호출 프로시저 간에 매개 변수를 전달하는 방법을 설명합니다. 기본값(Microsoft 확장 모드)에서 컴파일하고 매개 변수에 대한 방향 특성을 생략하면 MIDL 컴파일러는 기본값 [in]을 가정합니다.

[out] 매개 변수는 포인터여야 합니다. 실제로 C 함수 매개 변수는 값으로 전달되기 때문에 포인터 역할을 하지 않는 매개 변수에 적용할 때 [out] 특성은 의미가 없습니다. C에서 호출된 함수는 매개 변수 값의 프라이빗 복사본을 받습니다. 해당 매개 변수에 대한 호출 함수의 값을 변경할 수 없습니다. 그러나 매개 변수가 포인터 역할을 하는 경우 메모리에 액세스하고 수정하는 데 사용할 수 있습니다. [out] 특성은 서버 함수가 값을 클라이언트의 호출 함수로 반환해야 하며 포인터와 연결된 메모리가 포인터에 할당된 특성에 따라 반환되어야 했음을 나타냅니다.

다음 인터페이스는 매개 변수에 적용할 수 있는 방향 특성의 세 가지 가능한 조합을 보여 줍니다. InOutProc 함수는 IDL 파일에 다음과 같이 정의됩니다.

void InOutProc ([in]       short     s1,
                [in, out]  short *  ps2,
                [out]      float *  pf3);

첫 번째 매개 변수 s1은 [in]에만 해당합니다. 해당 값은 원격 컴퓨터로 전송되지만 호출 프로시저로 반환되지 않습니다. 서버 애플리케이션은 s1의 값을 변경할 수 있지만 클라이언트의 s1 값은 호출 전후와 동일합니다.

두 번째 매개 변수 ps2는 함수 프로토타입에서 [in] 및 [out] 특성을 모두 사용하는 포인터로 정의됩니다. [in] 특성은 매개 변수 값이 클라이언트에서 서버로 전달됨을 나타냅니다. [out] 특성은 ps2 가 가리키는 값이 클라이언트로 반환됨을 나타냅니다.

세 번째 매개 변수는 [out]만입니다. 서버의 매개 변수에 대한 공간이 할당되지만 항목에서 값이 정의되지 않았습니다. 위에서 설명한 대로 모든 [out] 매개 변수는 포인터여야 합니다.

원격 프로시저는 세 매개 변수의 값을 모두 변경하지만 클라이언트에서 [out] 및 [in] 매개 변수의 새 값만 사용할 수 있습니다.

#define MAX 257

void InOutProc(short    s1,
               short * ps2,
               float * pf3)
{
    *pf3 = (float) s1 / (float) *ps2;
    *ps2 = (short) MAX - s1;
    s1++;  // in only; not changed on the client side
    return;
}

InOutProc 호출에서 반환되면 두 번째 및 세 번째 매개 변수가 수정됩니다. [in]에만 있는 첫 번째 매개 변수는 변경되지 않습니다.

매개 변수에서

out 매개 변수

in-out 매개 변수