union 특성
공용 구조체 키워드(keyword) 차별된 공용 구조체와 관련된 기능에 나타납니다.
/* Encapsulated union*/
typedef [[ [type-attribute-list] ]] union [[ struct-name ]] switch (switch-type switch-name) [[ union-name ]]
{
C-style-case-list
[[ [ field-attribute-list <> ] ]] type-specifier <> declarator-list <>;
...
}
/* Non-encapsulated union*/
typedef [switch_type(switch-type) [[ , type-attr-list ]] ] union [[ tag ]]
{
[ case ( limited-expr-list) ]
[[ [ field-attribute-list ] ]] type-specifier declarator-list;
[[ [ default ]
[[ [ field-attribute-list ] ]] type-specifier declarator-list;
]]
}
-
type-attribute-list
-
공용 구조체 형식에 적용되는 0개 이상의 특성을 지정합니다. 유효한 형식 특성에는 [handle], [transmit_as]이 포함됩니다. 포인터 특성 [unique], 또는 [ptr]; 및 사용 특성 [context_handle] 및 [무시]. 캡슐화된 공용 구조체에는 [ref] 포인터 형식 특성이 있을 수도 있습니다. 여러 특성을 쉼표로 구분합니다.
-
struct-name
-
MIDL 컴파일러에서 생성된 구조체의 이름을 지정하는 선택적 태그를 지정합니다.
-
switch-type
-
switch-name
-
공용 구조체 비범죄자 역할을 하는 switch-type 형식 의 변수 이름을 지정합니다.
-
union-name
-
공용 구조체와 비범죄자를 포함하는 MIDL 컴파일러에서 생성된 구조체의 공용 구조체 이름을 지정하는 선택적 식별자를 지정합니다.
-
C 스타일 대/소문자 목록
-
"caseconst-expr :" 목록
-
limited-expression-list
-
하나 이상의 C 언어 식을 지정합니다. MIDL 컴파일러는 조건식, 논리 식, 관계형 식 및 산술 식을 지원합니다. MIDL은 식에서 함수 호출을 허용하지 않으며 증가 및 감소 연산자를 허용하지 않습니다. 목록의 개별 식은 쉼표로 구분해야 합니다.
-
field-attribute-list
-
공용 구조체 멤버에 적용되는 0개 이상의 필드 특성을 지정합니다. 유효한 필드 특성에는 [first_is], [last_is], [length_is], [max_is], [size_is]이 포함됩니다. 사용 특성 [문자열], [무시] 및 [context_handle]; 포인터 특성 [unique] 또는 [ptr]; 및 는 캡슐화되지 않은 공용 구조체인 멤버의 경우 공용 구조체 특성 [switch_type]입니다. Nonencapsulated 공용 구조체는 [ref] 포인터 필드 특성을 사용할 수도 있습니다. 여러 필드 특성을 쉼표로 구분합니다.
-
type-specifier
-
기본 형식, 구조체, 공용 구조체, 열거형 형식 또는 형식 식별자를 지정합니다. 선택적 스토리지 사양은 형식 지정자 앞에 설 수 있습니다.
-
declarator-list
-
식별자, 포인터 선언자 및 배열 선언자와 같은 하나 이상의 표준 C 선언자입니다. (함수 선언자 및 비트 필드 선언은 원격 프로시저 호출에서 전송되는 공용 구조체에서 허용되지 않습니다. MIDL 컴파일러 스위치 /osf를 사용하는 경우를 제외하고 이러한 선언자는 전송되지 않는 공용 구조체에서 허용됩니다.) 여러 선언자를 쉼표로 구분합니다.
-
태그
-
선택적 태그를 지정합니다.
MIDL은 캡슐화된 공용 구조체와 캡슐화되지 않은 공용 구조 체라는 두 가지 유형의 차별 된 공용 구조체를 지원합니다. 캡슐화된 공용 구조체는 RPC(NCA 버전 1)의 이전 구현과 호환됩니다. 캡슐화되지 않은 공용 구조체는 캡슐화된 공용 구조체의 일부 제한을 제거하고 캡슐화된 공용 구조체보다 더 눈에 띄는 비범죄를 제공합니다.
캡슐화된 공용 구조체는 스위치 키워드(keyword) 다른 공용 구조체 관련 키워드가 없는 것으로 식별됩니다.
공용 구조체라고도 하는 nonencapsulated 공용 구조체는 비범죄자와 해당 유형을 식별하는 [switch_is] 및 [switch_type] 키워드의 존재로 식별됩니다.
[in, out] 공용 구조체를 사용하는 경우 호출 중에 공용 구조체 스위치의 값을 변경하면 원격 호출이 로컬 호출과 다르게 동작할 수 있습니다. 반환할 때 스텁은 [in, out] 매개 변수를 클라이언트에 이미 있는 메모리에 복사합니다. 원격 프로시저가 공용 구조체 스위치의 값을 수정하고 결과적으로 데이터 개체의 크기를 변경하면 스텁은 유효한 메모리를 [out] 값으로 덮어쓸 수 있습니다. 공용 구조체 스위치가 데이터 개체를 기본 형식에서 포인터 형식으로 변경하면 스텁은 포인터 참조를 기본 형식의 [in] 값으로 표시된 메모리 위치에 복사할 때 유효한 메모리를 덮어쓸 수 있습니다.
상호 연결을 보장하려면 플랫폼 간에 공용 구조체의 모양이 동일해야 합니다.