Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los atributos de campo se pueden proporcionar en varias combinaciones siempre que el código auxiliar pueda usar la información para determinar el tamaño de la matriz y el número de bytes que se van a transmitir al servidor. Las relaciones entre los atributos se definen mediante las siguientes fórmulas:
size_is = max_is + 1;
length_is = last_is - first_is + 1;
Los valores asociados a los atributos deben obedecer varias reglas de sentido común basadas en esas fórmulas. Estas reglas son:
- No especifique un valor de índice [first_is] menor que cero o un valor [last_is] mayor que [max_is].
- No especifique un tamaño negativo para una matriz. Defina los elementos primero y último para que tengan como resultado un valor de longitud de cero o mayor. Defina el valor [max_is] para que el tamaño sea cero o mayor. Si MIDL se invocó con la opción /error bounds_check, el código auxiliar genera una excepción cuando el tamaño es menor que cero o la longitud transmitida es menor que cero.
- No use los atributos [length_is] y [last_is] al mismo tiempo, ni los atributos [size_is] y [last_is] al mismo tiempo.
Debido a la estrecha relación de C entre matrices y punteros, MIDL también permite declarar matrices en listas de parámetros mediante notación de puntero. MIDL trata un parámetro que es un puntero a un tipo como una matriz de ese tipo si el parámetro tiene cualquiera de los atributos asociados normalmente a las matrices.
/* IDL file */
[
uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45)
version(6.0)
]
interface arraytest
{
void fArray6([in] short sSize,
[in, out, size_is(sSize)] char * p1);
void fArray7([in] short sSize,
[in, out, size_is(sSize)] char achArray[]);
}
En el ejemplo anterior, los parámetros de matriz y puntero de las funciones fArray6 y fArray7 son equivalentes.