방향성(매개 변수) 특성
방향 특성은 데이터가 클라이언트에서 서버로 전송되는지, 서버에서 클라이언트로 전송되는지 또는 둘 다에 대해 설명합니다. 함수 프로토타입의 모든 매개 변수는 방향 특성과 연결되어야 합니다. 방향 특성의 세 가지 가능한 조합은 다음과 같습니다: 1) []의, 2) [], 3) [, ]. 호출 프로시저와 호출 프로시저 간에 매개 변수가 전달되는 방식을 설명합니다. 기본값(Microsoft 확장 모드)에서 컴파일하고 매개 변수에 대한 방향 특성을 생략하면 MIDL 컴파일러는 기본값 []로 가정합니다.
[out] 매개 변수는 포인터여야 합니다. 실제로 [out] 특성은 C 함수 매개 변수가 값으로 전달되기 때문에 포인터 역할을하지 않는 매개 변수에 적용되는 경우 의미가 없습니다. C에서 호출된 함수는 매개 변수 값의 프라이빗 복사본을 받습니다. 해당 매개 변수에 대한 호출 함수의 값을 변경할 수 없습니다. 그러나 매개 변수가 포인터 역할을 하는 경우 메모리에 액세스하고 수정하는 데 사용할 수 있습니다. [out] 특성은 서버 함수가 클라이언트의 호출 함수에 값을 반환해야 하며 포인터와 연결된 메모리가 포인터에 할당된 특성에 따라 반환되어야 임을 나타냅니다.
다음 인터페이스는 매개 변수에 적용할 수 있는 방향 특성의 세 가지 가능한 조합을 보여 줍니다. InOutProc 함수는 IDL 파일에 다음과 같이 정의됩니다.
void InOutProc ([in] short s1,
[in, out] short * ps2,
[out] float * pf3);
s1 첫 번째 매개 변수는 []만입니다. 해당 값은 원격 컴퓨터로 전송되지만 호출 프로시저로 반환되지 않습니다. 서버 애플리케이션은 s1대한 값을 변경할 수 있지만 클라이언트의 s1 값은 호출 전후와 동일합니다.
ps2 두 번째 매개 변수는 함수 프로토타입에서 [] 및 [] 특성을포인터로 정의됩니다. [] 특성의 [매개 변수 값이 클라이언트에서 서버로 전달됨을 나타냅니다. [out] 특성은 ps2 가리키는 값이 클라이언트에 반환됨을 나타냅니다.
세 번째 매개 변수는 [out]입니다. 서버의 매개 변수에 대한 공간이 할당되지만 항목에서 값이 정의되지 않았습니다. 위에서 설명한 대로 모든 [out] 매개 변수는 포인터여야 합니다.
원격 프로시저는 세 매개 변수의 값을 모두 변경하지만 [out] 및 [] 매개 변수의 [] 매개 변수의 새 값만 클라이언트에서 사용할 수 있습니다.
#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 호출에서 반환되면 두 번째 및 세 번째 매개 변수가 수정됩니다. 첫 번째 매개 변수는 []에서만변경되지 않습니다.
매개 변수
매개 변수