Bagikan melalui


Serialisasi Buffer Tetap

Saat menggunakan gaya buffer tetap, tentukan buffer yang cukup besar untuk mengakomodasi operasi pengodean (marshalling) yang dilakukan dengan handel. Saat membatalkan rekam jeda, Anda menyediakan buffer yang berisi semua data untuk didekodekan.

Gaya buffer tetap serialisasi menggunakan rutinitas berikut:

Fungsi MesEncodeFixedBufferHandleCreate mengalokasikan memori yang diperlukan untuk handel pengodean, lalu menginisialisasinya. Aplikasi dapat memanggil MesBufferHandleReset untuk menginisialisasi ulang handel, atau dapat memanggil MesHandleFree untuk membebaskan memori handel. Untuk membuat handel decoding yang sesuai dengan handel pengodean gaya tetap, Anda harus menggunakan MesDecodeBufferHandleCreate.

Aplikasi ini memanggil MesHandleFree untuk membebaskan handel buffer pengodean atau pendekodean.

Contoh Pengodean Buffer Tetap

Bagian berikut ini menyediakan contoh cara menggunakan penyangga tetap gaya-serialisasi handel untuk pengodean prosedur.

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

Kutipan berikut mewakili bagian dari aplikasi.

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

Bagian berikut ini menyediakan contoh cara menggunakan penyangga tetap gaya-serialisasi handel untuk pengodean jenis.

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

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

Kutipan berikut mewakili fragmen aplikasi yang relevan.

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