Serialisierung des festen Puffers
Wenn Sie den festen Pufferstil verwenden, geben Sie einen Puffer an, der groß genug ist, um die mit dem Handle ausgeführten Codierungsvorgänge (Marshalling) zu berücksichtigen. Beim Entkoppeln stellen Sie den Puffer bereit, der alle zu decodierenden Daten enthält.
Der feste Pufferstil der Serialisierung verwendet die folgenden Routinen:
Die MesEncodeFixedBufferHandleCreate-Funktion weist den für den Codierungshandle benötigten Speicher zu und initialisiert ihn dann. Die Anwendung kann MesBufferHandleReset- aufrufen, um das Handle erneut zu initialisieren, oder sie kann MesHandleFree- aufrufen, um den Speicher des Handles freizugeben. Um ein Decodierungshandle zu erstellen, das dem festen Stilcodierungshandle entspricht, müssen Sie MesDecodeBufferHandleCreateverwenden.
Die Anwendung ruft MesHandleFree auf, um den Codierungs- oder Decodierungspufferhandle frei zu geben.
Beispiele für feste Puffercodierung
Der folgende Abschnitt enthält ein Beispiel für die Verwendung eines Ziehpunkts für die Serialisierung eines festen Pufferstils für die Prozedurcodierung.
/*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();
}
Der folgende Auszug stellt einen Teil einer Anwendung dar.
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 );
}
Der folgende Abschnitt enthält ein Beispiel für die Verwendung eines Ziehpunkts für die Serialisierung mit fester Pufferformatvorlage für die Typcodierung.
/* This is an ACF file. MyType is defined in the IDL file */
[
explicit_handle
]
interface regress
{
typedef [ encode,decode ] MyType;
}
Der folgende Auszug stellt die relevanten Anwendungsfragmente dar.
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 );
}