Compartir a través de


Función type_UserMarshal

La <función type>_UserMarshal es una función auxiliar para los atributos [ wire_marshal] y [ user_marshal]. Los códigos auxiliares llaman a esta función para serializar los datos en el lado cliente o servidor. La función se define como:

unsigned char __RPC_FAR * __RPC_USER  <type>_UserMarshal(
    unsigned long __RPC_FAR * pFlags,
    unsigned char __RPC_FAR * pBuffer,
    <type>  __RPC_FAR *       pMyObj);

El <tipo> en el nombre de la función significa el tipo userm especificado en la definición de tipo [wire_marshal] o [user_marshal]. Este tipo puede ser intransmitible o incluso, cuando se usa con el atributo [user_marshal], un tipo desconocido para el compilador MIDL. El nombre del tipo de cable (el nombre del tipo transmisible) no se usa en el prototipo de función. Sin embargo, tenga en cuenta que el tipo de cable define el diseño de conexión para los datos según lo especificado por OSF DCE.

El parámetro pFlags es un puntero a un campo de marca larga sin signo. La palabra superior de la marca contiene marcas de representación de datos NDR definidas por OSF DCE para representaciones de punto flotante, orden de bytes y caracteres. La palabra inferior contiene una marca de contexto de serialización definida por el canal COM. El diseño exacto de las marcas dentro del campo se describe en La función type_UserSize.

El parámetro pBuffer es el puntero de búfer actual. Este puntero puede o no estar alineado en la entrada. La <función type>_UserMarshal debe alinear el puntero del búfer correctamente, serializar los datos y devolver la nueva posición del búfer, que es la dirección del primer byte después del objeto serializado. Tenga en cuenta que la especificación de tipo de cable determina el diseño real de los datos en el búfer.

El parámetro pMyObj es un puntero a un objeto de tipo de usuario.

El valor devuelto es la nueva posición del búfer, que es la dirección del primer byte después del objeto sin expresión.

El desbordamiento del búfer puede producirse cuando calcula incorrectamente el tamaño de los datos e intenta calcular más datos de lo esperado. Debe tener cuidado de evitar esta situación. Puede comprobarlo mediante el puntero que <_UserMarshal> devuelve. De lo contrario, corre el riesgo de que el motor NDR genere una excepción de desbordamiento de búfer más adelante.

Las excepciones deben detectarse y controlarse localmente, no se debe permitir que las excepciones se propigan en la pila de llamadas.

Serialización de reglas para user_marshal y wire_marshal

wire_marshal

user_marshal