Compartir a través de


Función type_UserSize

La <función type>_UserSize es una función auxiliar para los atributos [ wire_marshal] y [ user_marshal]. Los códigos auxiliares llaman a esta función para ajustar el tamaño del búfer de datos RPC para el objeto de datos de usuario antes de serializar los datos en el lado cliente o servidor. La función se define como:

unsigned long __RPC_USER  <type>_UserSize(
    unsigned long __RPC_FAR * pFlags,
    unsigned long StartingSize,
    <type>  __RPC_FAR *pMyObj);

El <tipo> en el nombre de la función significa el tipo userm, como se especifica 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] desconocido para el compilador MIDL. El nombre del tipo de conexión (el nombre del tipo transmitido a través de la red) 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 los datos según lo especificado por OSF DCE. Todos los datos deben convertirse en formato de representación de datos de red (NDR).

El parámetro pFlags es un puntero a un campo de marca larga sin signo . La palabra superior de la marca contiene marcas de formato NDR definidas por OSF DCE para representaciones de caracteres, orden de bytes y punto flotante. 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 muestra en la tabla siguiente.

Bits Marca Value
31-24 Representación de punto flotante 0 = IEEE 1 = VAX 2 = Cray 3 = IBM
23-20 Orden de bytes entero y de punto flotante 0 = Big-endian 1 = Little-endian
19-16 Representación de caracteres 0 = ASCII 1 = EBCDIC
15-0 Marca de contexto de serialización 0 = MSHCTX_LOCAL 1 = MSHCTX_NOSHAREDMEM 2 = MSHCTX_DIFFERENTMACHINE 3 = MSHCTX_INPROC

 

La marca de contexto de serialización permite modificar el comportamiento de la rutina en función del contexto de la llamada RPC. Por ejemplo, si tiene un identificador (largo) en un bloque de datos, podría enviar el identificador para una llamada en proceso, pero enviaría los datos reales de una llamada a otra máquina. La marca de contexto de serialización y sus valores se definen en los archivos Wtypes.h y Wtypes.idl del Kit de desarrollo de software de plataforma (SDK).

Nota

Cuando el tipo de cable está definido correctamente, no es necesario usar las marcas de formato NDR, ya que el motor NDR realiza las conversiones necesarias.

 

StartingSize un parámetro es el desplazamiento del búfer actual. El tamaño inicial indica el desplazamiento del búfer para el objeto de usuario y puede o no estar alineado correctamente. Su rutina debe tener en cuenta cualquier espaciado necesario.

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

El valor devuelto es la nueva posición de desplazamiento o búfer. La función debe devolver el tamaño acumulado, que es el tamaño inicial más el posible relleno más el tamaño de los datos.

La <función type>_UserSize puede devolver un sobreestimado del tamaño necesario. El tamaño real del búfer enviado se define mediante el tamaño de los datos, no por el tamaño de asignación del búfer.

No se llama a la función type>_UserSize si el tamaño de la conexión se puede calcular en tiempo de compilación.< Tenga en cuenta que para la mayoría de las uniones, incluso si no hay punteros, el tamaño real de la representación de cable solo se puede determinar en tiempo de ejecución.

Serialización de reglas para user_marshal y wire_marshal

user_marshal

wire_marshal