Исправлена сериализация буфера
При использовании фиксированного стиля буфера укажите буфер, достаточно большой для размещения операций кодирования (маршаллинга), выполняемых с дескриптором. При отмене параметров вы предоставляете буфер, содержащий все данные для декодирования.
Фиксированный стиль сериализации использует следующие подпрограммы:
Функция 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 );
}