Атрибут encode
Атрибут [encode] ACF указывает, что процедура или тип данных нуждаются в поддержке сериализации.
[
encode
[ , interface-attribute-list]
]
interface interface-name
{
interface-definition
}
[ encode [ , op-attribute-list] ] proc-name
typedef [encode [ , type-attribute-list] ] type-name
-
interface-attribute-list
-
Задает другие атрибуты, которые применяются к интерфейсу в целом.
-
interface-name
-
Указывает имя интерфейса.
-
определение интерфейса
-
Указывает операторы IDL, которые формируют определение интерфейса.
-
op-attribute-list
-
Указывает другие операционные атрибуты, которые применяются к процедуре, например [decode].
-
proc-name
-
Указывает имя процедуры.
-
type-attribute-list
-
Указывает другие атрибуты, которые применяются к типу, например [decode] и [allocate].
-
type-name
-
Указывает тип, определенный в IDL-файле.
Атрибут [encode] заставляет компилятор MIDL создавать код, который приложение может использовать для сериализации данных в буфер. Атрибут [decode] создает код для распаковки данных из буфера.
Используйте атрибуты [encode] и [decode] в ACF для создания кода сериализации для процедур или типов, определенных в IDL-файле интерфейса. При использовании в качестве атрибута интерфейса [encode] применяется ко всем типам и процедурам, определенным в IDL-файле. При использовании в качестве рабочего атрибута [encode] применяется только к указанной процедуре. При использовании в качестве атрибута типа [encode] применяется только к указанному типу.
Когда атрибут [encode] или [decode] применяется к процедуре, компилятор MIDL создает заглушку сериализации так же, как удаленные заглушки создаются для удаленных подпрограмм. Процедура может быть удаленной или сериализующей процедурой, но не может быть одновременно. Прототип созданной подпрограммы отправляется в заглушку. H-файл, а сама заглушка переходит в файл STUB_C.C.
Компилятор MIDL создает две функции для каждого типа, к которому применяется атрибут [encode] , и одну дополнительную функцию для каждого типа, к которому применяется атрибут [decode] . Например, для определяемого пользователем типа с именем MyType компилятор создает код для функций MyType_Encode, MyType_Decode и MyType_AlignSize. Для этих функций компилятор записывает прототипы в STUB. H и исходный код для STUB_C.C.
Дополнительные сведения о дескрипторах сериализации и кодировании или декодирования данных см. в разделе Службы сериализации.
/*
ACF file example;
Assumes MyType1, MyType2, MyType3, MyProc1, MyProc2, MyProc3 defined
in IDL file
MyType1, MyType2, MyProc1, MyProc2 have encode and decode
serialization support
MyType3 and MyProc3 have encode serialization support only
*/
[
encode,
implicit_handle(handle_t bh)
]
interface regress
{
typedef [ decode ] MyType1;
typedef [ encode, decode ] MyType2;
[ decode ] MyProcc1();
[ encode ] MyProc2();
}