Serialisatie van vaste buffer
Wanneer u de vaste bufferstijl gebruikt, geeft u een buffer op die groot genoeg is voor de coderingsbewerkingen (marshalling) die met de ingang worden uitgevoerd. Wanneer u demarshaling ongedaan maakt, geeft u de buffer op die alle gegevens bevat die moeten worden gedecodeerd.
De vaste bufferstijl van serialisatie maakt gebruik van de volgende routines:
De functie MesEncodeFixedBufferHandleCreate wijst het geheugen toe dat nodig is voor de coderingsgreep en initialiseert deze. De toepassing kan MesBufferHandleReset aanroepen om de ingang opnieuw te initialiseren of kan MesHandleFree aanroepen om het geheugen van de handle vrij te maken. Als u een decoderingsgreep wilt maken die overeenkomt met de vaste stijlcoderingsgreep, moet u MesDecodeBufferHandleCreategebruiken.
De toepassing roept MesHandleFree aan om de buffergreep voor codering of decoderen vrij te maken.
Voorbeelden van vaste buffercodering
In de volgende sectie ziet u een voorbeeld van het gebruik van een vaste bufferstijl- serialisatiegreep voor procedurecodering.
/*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();
}
Het volgende fragment vertegenwoordigt een deel van een toepassing.
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 );
}
In de volgende sectie ziet u een voorbeeld van het gebruik van een vaste bufferstijl- serialisatiegreep voor typecodering.
/* This is an ACF file. MyType is defined in the IDL file */
[
explicit_handle
]
interface regress
{
typedef [ encode,decode ] MyType;
}
Het volgende fragment vertegenwoordigt de relevante toepassingsfragmenten.
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 );
}