Aracılığıyla paylaş


Sabit Arabellek Serileştirmesi

Sabit arabellek stilini kullanırken, tanıtıcıyla gerçekleştirilen kodlama (marshalling) işlemlerini barındıracak kadar büyük bir arabellek belirtin. Özetlemeyi kaldırırken, çözülecek tüm verileri içeren arabelleği sağlarsınız.

Serileştirmenin sabit arabellek stili aşağıdaki yordamları kullanır:

MesEncodeFixedBufferHandleCreate işlevi kodlama tanıtıcısı için gereken belleği ayırır ve ardından başlatır. Uygulama MesBufferHandleReset çağırarak tanıtıcıyı yeniden başlatabilir veya tanıtıcının belleğini boşaltmak için MesHandleFree çağırabilir. Sabit stil kodlama tutamacıyla ilgili bir kod çözme tutamacı oluşturmak için MesDecodeBufferHandleCreatekullanmanız gerekir.

Uygulama, kodlama veya kod çözme arabellek tutamacını serbest bırakabilmek için MesHandleFree çağırır.

Sabit Arabellek Kodlama örnekleri

Aşağıdaki bölümde, yordam kodlaması için sabit arabellek stilinin seri hale getirme tutamacının nasıl kullanılacağına ilişkin bir örnek verilmiştir.

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

Aşağıdaki alıntı bir uygulamanın bir bölümünü temsil eder.

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

Aşağıdaki bölümde, tür kodlaması için sabit arabellek stili-serileştirme tutamacının nasıl kullanılacağına ilişkin bir örnek verilmiştir.

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

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

Aşağıdaki alıntı, ilgili uygulama parçalarını temsil eder.

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