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.
Temas relacionados