Udostępnij za pośrednictwem


Serializacja stałego buforu

W przypadku używania stylu stałego buforu określ bufor, który jest wystarczająco duży, aby pomieścić operacje kodowania (marshalling) wykonywane przy użyciu uchwytu. Podczas wyrejestrowania należy podać bufor zawierający wszystkie dane do dekodowania.

Stały styl buforu serializacji używa następujących procedur:

Funkcja MesEncodeFixedBufferHandleCreate przydziela pamięć wymaganą do uchwytu kodowania, a następnie inicjuje ją. Aplikacja może wywołać MesBufferHandleReset w celu ponownego zainicjowania uchwytu lub wywołać MesHandleFree, aby zwolnić pamięć uchwytu. Aby utworzyć uchwyt dekodowania odpowiadający stałemu uchwytowi kodowania stylu, należy użyć MesDecodeBufferHandleCreate.

Aplikacja wywołuje MesHandleFree, aby zwolnić uchwyt buforu kodowania lub dekodowania.

Przykłady kodowania stałego buforu

W poniższej sekcji przedstawiono przykład użycia stałego uchwytu typu buforu serializacji do kodowania procedury.

/*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();
}

Poniższy fragment reprezentuje część aplikacji.

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 );
}

W poniższej sekcji przedstawiono przykład użycia stałego uchwytu typu serializacji stylu buforu do kodowania typów.

/* This is an ACF file. MyType is defined in the IDL file */

[    
    explicit_handle
]
interface regress
{
    typedef [ encode,decode ] MyType;
}

Poniższy fragment reprezentuje odpowiednie fragmenty aplikacji.

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 );
}