Función type_UserMarshal
La función <tipo>_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 función significa el tipo userm especificado en el [wire_marshal] o [user_marshal] definición de tipo. 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 conexión define el diseño de la 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 tal como se define en el canal COM. El diseño exacto de las marcas dentro del campo se describe en The type_UserSize Function.
El parámetro pBuffer es el puntero de búfer actual. Este puntero puede alinearse o no en la entrada. El <tipo>_UserMarshal función debe alinear el puntero del búfer adecuadamente, 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 del 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 separació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 <tipo>_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.
Temas relacionados