WS_STRUCT_DESCRIPTION 구조체(webservices.h)
C 구조체 형식 및 XML 요소에 매핑되는 방법에 대한 정보입니다. 이는 WS_STRUCT_TYPE 함께 사용됩니다.
구문
typedef struct _WS_STRUCT_DESCRIPTION {
ULONG size;
ULONG alignment;
WS_FIELD_DESCRIPTION **fields;
ULONG fieldCount;
WS_XML_STRING *typeLocalName;
WS_XML_STRING *typeNs;
WS_STRUCT_DESCRIPTION *parentType;
WS_STRUCT_DESCRIPTION **subTypes;
ULONG subTypeCount;
ULONG structOptions;
} WS_STRUCT_DESCRIPTION;
멤버
size
구조체의 크기(바이트)입니다.
alignment
구조체의 맞춤 요구 사항입니다. 이는 1에서 8 사이의 두 가지 힘이어야 합니다.
fields
구조체의 필드에 대한 설명에 대한 포인터 배열입니다.
이 배열의 필드 순서에 대한 자세한 내용은 설명 섹션을 참조하세요.
fieldCount
필드 배열의 필드 수입니다. 필드로 표현되지 않는 구조체의 모든 부분은 초기화되지 않은 상태로 남습니다. 두 필드 설명은 구조체의 동일한 오프셋을 참조할 수 없습니다.
typeLocalName
구조체의 XML 형식 이름입니다. 이는 구조체가 다른 구조체에서 파생되는 경우에만 사용되며, 그렇지 않으면 NULL 일 수 있습니다.
typeNs
구조체의 XML 형식 네임스페이스입니다. 이는 구조체가 다른 구조체에서 파생되는 경우에만 사용되며, 그렇지 않으면 NULL 일 수 있습니다.
parentType
이 형식이 파생된 형식입니다. 이는 구조체가 다른 구조체에서 파생되는 경우에만 사용되며, 그렇지 않으면 NULL 일 수 있습니다.
subTypes
파생 형식에 대한 포인터의 배열입니다. 이는 구조체가 다른 구조체에서 파생되는 경우에만 사용되며, 그렇지 않으면 NULL 일 수 있습니다.
subTypeCount
subTypes 배열의 형식 수입니다. 이는 구조체가 다른 구조체에서 파생되는 경우에만 사용되며, 그렇지 않으면 NULL 일 수 있습니다.
structOptions
설명
다음은 구조체 내 필드의 순서를 설명하는 문법입니다. 순서는 각 WS_FIELD_DESCRIPTION 매핑 필드에 따라 정의됩니다.
Fields := TypeAttributeField? AttributeField* ContentFields UnmappedFields*
ContentFields := TextContentField | ElementContentFields
ElementContentFields := ElementContentField* ? AnyElementField?
ElementContentField := ElementField | RepeatingElementField | ElementChoiceField | RepeatingElementChoiceField
ElementField := WS_ELEMENT_FIELD_MAPPING
RepeatingElementField := WS_REPEATING_ELEMENT_FIELD_MAPPING
ElementChoiceField := WS_ELEMENT_CHOICE_FIELD_MAPPING
RepeatingElementChoiceField := WS_REPEATING_ELEMENT_CHOICE_FIELD_MAPPING
AnyElementField := WS_ANY_ELEMENT_FIELD_MAPPING
TextContentField := WS_TEXT_FIELD_MAPPING
UnmappedField := WS_NO_FIELD_MAPPING
TypeAttributeField := WS_TYPE_ATTRIBUTE_FIELD_MAPPING
AttributeField := WS_ATTRIBUTE_FIELD_MAPPING
구조체에 대한 필드 설명은 지정된 순서대로 직렬화되고 역직렬화됩니다. 역직렬화 프로세스는 "greedy"입니다. 즉, 다음 필드 설명을 고려하기 전에 특정 필드 설명이 사용되는 정의와 일치하는 만큼의 콘텐츠입니다. 이 방법은 콘텐츠가 현재 필드 설명 또는 다음 필드 설명과 일치할 수 있는 경우 모호성을 해결합니다.
역직렬화 프로세스도 제한적입니다. 모든 콘텐츠는 필드 설명에 따라 역직렬화되어야 합니다. 기본적으로 처리되지 않은 요소와 특성으로 인해 역직렬화 프로세스가 실패합니다. 그러나 WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT 플래그가 설정되면 요소의 후행 내용이 무시되고 삭제됩니다. 마찬가지로 처리되지 않은 특성은 WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES 플래그가 설정되면 무시되고 삭제됩니다.
WS_FIELD_DESCRIPTION 구조체는 오프셋을 사용하여 구조체 내의 실제 필드 위치를 결정하므로 구조체 내 필드의 실제 순서에 대한 제한은 없습니다.
한 구조체가 다른 구조체에서 파생되면 두 구조체에 대한 필드가 파생된 구조체 설명에 포함되어야 하며 위의 문법을 유지 관리해야 합니다. 예를 들어:
struct BaseStructure
{
const WS_STRUCT_DESCRIPTION* _type;
int baseAttribute;
int baseElement;
};
// BaseStructure field descriptions:
// WS_TYPE_ATTRIBUTE_FIELD_MAPPING // _type
// WS_ATTRIBUTE_FIELD_MAPPING // baseAttribute
// WS_ELEMENT_FIELD_MAPPING // baseElement
struct DerivedStructure
{
struct BaseStructure _base;
int derivedAttribute;
int derivedElement;
};
// DerivedStructure field descriptions:
// WS_TYPE_ATTRIBUTE_FIELD_MAPPING // _type
// WS_ATTRIBUTE_FIELD_MAPPING // baseAttribute
// WS_ATTRIBUTE_FIELD_MAPPING // derivedAttribute
// WS_ELEMENT_FIELD_MAPPING // baseElement
// WS_ELEMENT_FIELD_MAPPING // derivedElement
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 7 [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2008 R2 [데스크톱 앱만 해당] |
머리글 | webservices.h |