Sdílet prostřednictvím


Oprava serializace vyrovnávací paměti

Při použití pevného stylu vyrovnávací paměti zadejte vyrovnávací paměť, která je dostatečně velká pro přizpůsobení operací kódování (zařazování) provedených s úchytem. Při zrušení šifrování zadáte vyrovnávací paměť, která obsahuje všechna data pro dekódování.

Pevný styl vyrovnávací paměti serializace používá následující rutiny:

Funkce MesEncodeFixedBufferHandleCreate přidělí paměť potřebnou pro popisovač kódování a pak ji inicializuje. Aplikace může volat MesBufferHandleReset znovu inicializovat popisovač, nebo může volat MesHandleFree uvolnit paměť úchytu. Chcete-li vytvořit dekódovací popisovač odpovídající pevnému úchytu pro kódování stylu, je nutné použít MesDecodeBufferHandleCreate.

Aplikace volá MesHandleFree uvolnit kódování nebo dekódovací úchyt vyrovnávací paměti.

Příklady pevného kódování vyrovnávací paměti

Následující část obsahuje příklad použití pevného úchytu pro kódování procedury stylem vyrovnávací paměti serializace.

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

Následující výňatek představuje část aplikace.

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

Následující část obsahuje příklad použití pevného stylu vyrovnávací paměti – serializace popisovač pro kódování typu.

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

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

Následující výňatek představuje relevantní fragmenty aplikace.

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