Atributos length, size y directional
Al pasar matrices entre el cliente y el servidor, los atributos relacionados con el tamaño [max_is] y [size_is] determinan cuántos elementos de matriz asigna el código auxiliar del servidor. Los atributos relacionados con la longitud [length_is], [first_is] y [last_is] determinan cuántos elementos se transmiten tanto al servidor como al cliente.
Se pueden aplicar diferentes atributos direccionales a parámetros. Sin embargo, algunas combinaciones de atributos direccionales pueden provocar errores. Por ejemplo, supongamos que está escribiendo una interfaz que especifica un procedimiento con dos parámetros, una matriz y la longitud transmitida de la matriz. El término dir_attr hace referencia al atributo direccional aplicado al parámetro como:
Proc1(
[dir_attr] short *plength;
[dir_attr, length_is(pLength)] short array[MAX_SIZE]);
El comportamiento del compilador MIDL para cada combinación de atributos direccionales se describe en la tabla siguiente.
Array | Parámetro length | Acciones de código auxiliar durante la llamada desde el cliente al servidor | Acciones de código auxiliar devueltas desde el servidor al cliente |
---|---|---|---|
[in] | [in] | Transmita la longitud y el número de elementos indicados por el parámetro . | No se transmiten datos. |
[in] | [out] | No legal; Error del compilador MIDL. | No legal; Error del compilador MIDL. |
[in] | [in, out] | Transmita la longitud y el número de elementos indicados por el parámetro length. | Transmita solo la longitud. |
[out] | [in] | Transmitir la longitud. Si el tamaño de la matriz es fijo, asigne el tamaño de la matriz en el servidor, pero no transmita ningún elemento. Si el tamaño de la matriz no está enlazado, no es legal: error del compilador MIDL. |
Transmite el número de elementos indicados por la longitud. Tenga en cuenta que la longitud se puede cambiar y puede tener un valor diferente del valor en el cliente. No transmita la longitud. |
[out] | [out] | Asigne espacio para el parámetro length en el servidor, pero no transmita el parámetro . Si el tamaño de la matriz es fijo, asigne el tamaño de la matriz en el servidor, pero no transmita ningún elemento. Si el tamaño de la matriz no es fijo, no es legal: error del compilador MIDL. |
Transmita la longitud y el número de elementos indicados por la longitud establecida por la aplicación de servidor. |
[out] | [in, out] | Transmita el parámetro length. Si el tamaño de la matriz está enlazado, asigne el tamaño de la matriz en el servidor, pero no transmita ningún elemento. Si el tamaño de la matriz no está enlazado, no es legal: error del compilador MIDL. |
Transmitir la longitud. Transmita el número de elementos de matriz indicados por la longitud. |
[in, out] | [in] | Transmita la longitud y el número de elementos indicados por el parámetro . | No transmita la longitud. Transmite el número de elementos indicados por la longitud. Tenga en cuenta que la longitud se puede cambiar y puede tener un valor diferente del valor original en el cliente. |
[in, out] | [out] | No legal; Error del compilador MIDL. | No legal; Error del compilador MIDL. |
[in, out] | [in, out] | Transmita la longitud y el número de elementos indicados por el parámetro . | Transmita la longitud y el número de elementos indicados por el parámetro . |
En general, no debe modificar los parámetros de longitud o tamaño en el lado servidor. Si cambia el parámetro length, puede huérfana de memoria. Para obtener más información, vea Memory Orphaning.