Compartir a través de


Función type_UserSize

La función>_UserSize de tipo<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 de <> en el nombre de función significa el tipo userm, tal como se especifica en la definición de tipo de [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 de largo sin signo sin signo. La palabra superior de la marca contiene marcas de formato 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 muestra en la tabla siguiente.

Bits Bandera Valor
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 (long) a 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 se define correctamente, no es necesario usar las marcas de formato NDR, ya que el motor NDR realiza las conversiones necesarias.

 

El 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 alinearse correctamente. La rutina debe tener en cuenta cualquier relleno que sea 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.

El tipo <>_UserSize función 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>_UserSize tipo<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.

reglas de serialización de user_marshal y wire_marshal

user_marshal

wire_marshal