length_is (atributo)

El atributo [length_is] especifica el número de elementos de matriz que se van a transmitir. Debe especificar un valor no negativo.

[length_is( limited-expression-list )]

Parámetros

limited-expression-list

Especifica una o varias expresiones de lenguaje C. Cada expresión se evalúa como un entero que representa el número de elementos de matriz que se van a transmitir. El compilador MIDL admite expresiones condicionales, expresiones lógicas, expresiones relacionales y expresiones aritméticas. MIDL no permite invocaciones de función en expresiones y no permite operadores de incremento y decremento. Separe varias expresiones con comas.

Observaciones

El atributo [length_is] determina el valor de los índices de matriz correspondientes al atributo [last_is] cuando no se especifica [last_is]. La relación entre estos índices de matriz es la siguiente: length = last - first + 1.

El atributo [length_is] no se puede usar al mismo tiempo que el atributo [last_is] o el atributo [string].

Para definir una cadena con un atributo [length_is] o [last_is], use una matriz de caracteres o un puntero sin el atributo [string].

El uso de una expresión constante con el atributo [length_is] es un uso inadecuado del atributo. Es legal, pero ineficaz, y dará como resultado código de serialización más lento.

Puede usar los atributos [size_is] y [length_is] juntos. Al hacerlo, el atributo [size_is] controla la cantidad de memoria asignada para los datos. El atributo [length_is] especifica cuántos elementos se transmiten. La cantidad de memoria especificada por los atributos [size_is] y [length_is] no deben ser iguales. Por ejemplo, el cliente puede pasar un parámetro [in, out] a un servidor y especificar una asignación de memoria grande con [size_is], aunque especifica un pequeño número de elementos de datos que se van a pasar con [length_is]. Esto permite al servidor rellenar la matriz con más datos de los que recibió, que luego puede devolver al cliente.

En general, no es útil especificar [size_is] y [length_is] en los parámetros [in] o [out]. En ambos casos, [size_is] controla la asignación de memoria. La aplicación podría usar [size_is] para asignar más elementos de matriz de los que transmite (según lo especificado por [length_is]). Sin embargo, esto sería ineficaz. También sería ineficaz especificar valores idénticos para [size_is] y [length_is]. Dado que crearía una sobrecarga adicional durante la serialización de parámetros. Cuando los valores de [size_is] y [length_is] siempre son los mismos, omita el atributo [length_is].

Ejemplos

/* counted string holding at most "size" characters */ 
typedef struct 
{ 
    unsigned short size; 
    unsigned short length; 
    [size_is(size), length_is(length)] char string[*]; 
 } COUNTED_STRING_TYPE; 
 
/* counted string holding at most 80 characters */ 
typedef struct 
{ 
    unsigned short length; 
    [length_is(length)] char string[80]; 
} STATIC_COUNTED_STRING_TYPE; 
 
HRESULT Proc1(
    [in] short iLength; 
    [in, length_is(iLength)] short asNumbers[10]);

Vea también

Atributos de campo

first_is

Archivo de definición de interfaz (IDL)

last_is

max_is

min_is

size_is

Cadena