RPC(union 키워드(keyword))
공용 구조체와 같은 C 언어의 일부 기능은 원격 프로시저 호출에서 사용할 수 있도록 특수 MIDL 키워드가 필요합니다. C 언어의 공용 구조체는 다양한 형식과 크기의 개체를 보유하는 변수입니다. 개발자는 일반적으로 공용 구조체에 저장된 형식을 추적하는 변수를 만듭니다. 분산 환경에서 올바르게 작동하려면 공용 구조체의 형식 또는 비범죄자를 나타내는 변수도 원격 컴퓨터에서 사용할 수 있어야 합니다. MIDL은 [switch_type] 및 [switch_is] 키워드를 제공하여 비범죄 유형 및 이름을 식별합니다.
MIDL을 사용하려면 다음 두 가지 방법 중 하나로 비범죄자를 공용 구조체와 함께 전송해야 합니다.
- 공용 구조체와 비범죄자는 매개 변수로 제공되어야 합니다.
- 공용 구조체와 비범죄자는 구조체로 패키지되어야 합니다.
MIDL은 두 가지 기본 유형의 차별적 공용 구조체인 nonencapsulated_union 및 encapsulated_union 제공합니다. union이 매개 변수인 경우 캡슐화되지 않은 공용 구조체의 비범죄자는 또 다른 매개 변수입니다. 공용 구조체가 구조체의 필드인 경우 다른 필드입니다. 캡슐화된 공용 구조체의 정의는 첫 번째 필드가 비범죄자이고 두 번째 및 마지막 필드가 공용 구조체인 구조 정의로 바꿉니다. 다음 예제에서는 공용 구조체 및 비범죄자를 매개 변수로 제공하는 방법을 보여 줍니다.
typedef [switch_type(short)] union
{
[case(0)] short sVal;
[case(1)] float fVal;
[case(2)] char chVal;
[default] ;
} DISCRIM_UNION_PARAM_TYPE;
short UnionParamProc(
[in, switch_is(sUtype)] DISCRIM_UNION_PARAM_TYPE Union,
[in] short sUtype);
앞의 예제에서 공용 구조체는 단일 값( short, float 또는 char)을 포함할 수 있습니다. 공용 구조체의 형식 정의에는 비범죄자의 형식을 지정하는 MIDL switch_type 특성이 포함됩니다. 여기서 [switch_type(short)]은 비범죄자가 short 형식임을 지정합니다. 스위치는 정수 형식이어야 합니다.
공용 구조체가 구조체의 구성원인 경우 비범죄자는 동일한 구조체의 멤버여야 합니다. 공용 구조체가 매개 변수인 경우 비범죄자는 다른 매개 변수여야 합니다. 앞의 예제에서 UnionParamProc 함수에 대한 프로토타입은 호출의 마지막 매개 변수로 비범죄적 sUtype 을 표시합니다. (비범죄자는 호출의 모든 위치에 나타날 수 있습니다.) [switch_is] 특성에 지정된 매개 변수의 형식은 [switch_type] 특성에 지정된 형식과 일치해야 합니다.
다음 예제에서는 비범죄자를 공용 구조체로 패키지하는 단일 구조체를 사용하는 방법을 보여 줍니다.
typedef struct
{
short utype; /* discriminant can precede or follow union */
[switch_is(utype)] union
{
[case(0)] short sVal;
[case(1)] float fVal;
[case(2)] char chVal;
[default] ;
} u;
} DISCRIM_UNION_STRUCT_TYPE;
short UnionStructProc(
[in] DISCRIM_UNION_STRUCT_TYPE u1);
Microsoft RPC MIDL 컴파일러는 typedef 구문 외부에서 공용 구조체 선언을 허용합니다. 이 기능은 DCE IDL에 대한 확장입니다. 자세한 내용은 공용 구조체를 참조하세요.