Serialización de búfer fija
Al usar el estilo de búfer fijo, especifique un búfer lo suficientemente grande como para acomodar las operaciones de codificación (serialización) realizadas con el identificador. Al desacoplar, se proporciona el búfer que contiene todos los datos que se van a descodificar.
El estilo fijo de búfer de serialización usa las siguientes rutinas:
La función MesEncodeFixedBufferHandleCreate asigna la memoria necesaria para el identificador de codificación y, a continuación, la inicializa. La aplicación puede llamar a MesBufferHandleReset para reinicializar el identificador o puede llamar a MesHandleFree para liberar la memoria del identificador. Para crear un identificador de descodificación correspondiente al identificador fijo de codificación de estilo, debe usar MesDecodeBufferHandleCreate.
La aplicación llama a MesHandleFree para liberar el identificador de búfer de codificación o descodificación.
Ejemplos de codificación de búfer fijo
En la sección siguiente se proporciona un ejemplo de cómo usar un identificador de serialización de estilo de búfer fijo para la codificación de procedimientos.
/*This is a fragment of the IDL file defining MooProc */
...
void __RPC_USER
MyProc( [in] handle_t Handle, [in,out] MyType * pMyObject,
[in, out] ThisType * pThisObject);
...
/*This is an ACF file. MyProc is defined in the IDL file */
[
explicit_handle
]
interface regress
{
[ encode,decode ] MyProc();
}
El siguiente extracto representa una parte de una aplicación.
if (MesEncodeFixedBufferHandleCreate (
Buffer, BufferSize,
pEncodedSize, &Handle) == RPC_S_OK)
{
...
/* Manufacture a MyObject and a ThisObject */
...
/* The serialization works from the beginning of the buffer because
the handle is in the initial state. The function MyProc does the
following when called with an encoding handle:
- sizes all the parameters for marshalling,
- marshalls into the buffer (and sets the internal state
appropriately)
*/
MyProc ( Handle, pMyObject, pThisObject );
...
MesHandleFree ();
}
if (MesDecodeBufferHandleCreate (Buffer, BufferSize, &Handle) ==
RPC_S_OK)
{
/* The MooProc does the following for you when called with a decoding
handle:
- unmarshalls the objects from the buffer into *pMooObject and
*pBarObject
*/
MyProc ( Handle, pMyObject, pThisObject);
...
MesHandleFree ( Handle );
}
En la sección siguiente se proporciona un ejemplo de cómo usar un identificador de serialización de estilo de búfer fijo para la codificación de tipos.
/* This is an ACF file. MyType is defined in the IDL file */
[
explicit_handle
]
interface regress
{
typedef [ encode,decode ] MyType;
}
El siguiente extracto representa los fragmentos de aplicación pertinentes.
if (MesEncodeFixedBufferHandleCreate (Buffer, BufferSize,
pEncodedSize, &Handle) == RPC_S_OK)
{
//...
/* Manufacture a MyObject and a pMyObject */
//...
MyType_Encode ( Handle, pMyObject );
//...
MesHandleFree ();
}
if (MesDecodeBufferHandleCreate (Buffer, BufferSize, &Handle) ==
RPC_S_OK )
{
MooType_Decode (Handle, pMooObject);
//...
MesHandleFree ( Handle );
}