Compartir a través de


Serialización de tipos

El compilador MIDL genera hasta tres funciones para cada tipo al que se aplica el atributo [ encode] o [ decode]. Por ejemplo, para un tipo definido por el usuario denominado MyType, el compilador genera código para las funciones de MyType_Encode, MyType_Decode y MyType_AlignSize. Para estas funciones, el compilador escribe prototipos en Stub.h y código fuente en Stub_c.c. Por lo general, puede codificar un objeto MyType con MyType_Encode y descodificar un objeto del búfer mediante MyType_Decode. MyType_AlignSize se usa si necesita conocer el tamaño del búfer de serialización antes de asignarlo.

El compilador MIDL genera la siguiente función de codificación. Esta función serializa los datos del objeto al que apunta pObject y el búfer se obtiene según el método especificado en el identificador. Después de escribir los datos serializados en el búfer, se controla el búfer. Tenga en cuenta que el identificador hereda el estado de las llamadas anteriores y los búferes deben alinearse en 8.

Para un identificador implícito:

void MyType_Encode (MyType __RPC_FAR * pObject);

Para un identificador explícito:

void MyType_Encode (handle_t Handle, MyType __RPC_FAR * pObject);

La siguiente función deserializa los datos del almacenamiento de la aplicación en el objeto al que apunta pObject. Se proporciona un búfer serializado según el método especificado en el identificador. Tenga en cuenta que el identificador puede heredar el estado de las llamadas anteriores y los búferes deben alinearse en 8.

Para un identificador implícito:

void MyType_Decode (MyType __RPC_FAR * pObject);

Para un identificador explícito:

void MyType_Decode (handle_t Handle, MyType __RPC_FAR * pObject);

La siguiente función devuelve un tamaño, en bytes, que incluye la instancia de tipo más los bytes de relleno necesarios para alinear los datos. Esto permite serializar un conjunto de instancias de los mismos tipos o diferentes en un búfer, a la vez que garantiza que los datos de cada objeto estén alineados correctamente. MyType_AlignSize supone que la instancia a la que apunta pObject se serializará en un búfer que comienza en el desplazamiento alineado en 8.

Para un identificador implícito:

size_t MyType_AlignSize (MyType __RPC_FAR * pObject);

Para un identificador explícito:

size_t MyType_AlignSize (handle_t Handle, MyType __RPC_FAR * pObject);

Tenga en cuenta que ambos procedimientos remotos con identificadores de enlace implícitos y tipos serializados con identificadores de serialización implícitos usan la misma variable de identificador global. Por lo tanto, es aconsejable no mezclar procedimientos remotos y serialización de tipos en una interfaz con identificadores implícitos. Para obtener más información, consulte Identificadores implícitos frente a explícitos.