다음을 통해 공유


고정 버퍼 직렬화

고정 버퍼 스타일을 사용하는 경우 핸들로 수행되는 인코딩(마샬링) 작업을 수용할 수 있을 만큼 큰 버퍼를 지정합니다. 경계를 해제할 때 디코딩할 모든 데이터가 포함된 버퍼를 제공합니다.

serialization의 고정 버퍼 스타일은 다음 루틴을 사용합니다.

MesEncodeFixedBufferHandleCreate 함수는 인코딩 핸들에 필요한 메모리를 할당한 다음 초기화합니다. 애플리케이션은 MesBufferHandleReset 호출하여 핸들을 다시 초기화하거나 MesHandleFree 호출하여 핸들의 메모리를 해제할 수 있습니다. 고정 스타일 인코딩 핸들에 해당하는 디코딩 핸들을 만들려면 MesDecodeBufferHandleCreate사용해야 합니다.

애플리케이션은 MesHandleFree 호출하여 인코딩 또는 디코딩 버퍼 핸들을 해제합니다.

고정 버퍼 인코딩의 예

다음 섹션에서는 프로시저 인코딩을 위해 고정 버퍼 스타일 직렬화 핸들을 사용하는 방법의 예를 제공합니다.

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

다음 발췌문은 애플리케이션의 일부를 나타냅니다.

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

다음 섹션에서는 형식 인코딩에 고정 버퍼 스타일 직렬화 핸들을 사용하는 방법의 예를 제공합니다.

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

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

다음 발췌문은 관련 애플리케이션 조각을 나타냅니다.

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