Atributos da matriz
Há uma estreita relação entre matrizes e ponteiros na linguagem C. Quando passado como um parâmetro para uma função, um nome de matriz é tratado como um ponteiro para o primeiro elemento da matriz, conforme mostrado no exemplo a seguir:
/* fragment */
extern void f1(char * p1);
void main(void)
{
char chArray[MAXSIZE];
fLocal1(chArray);
}
Em uma chamada local, você pode usar o parâmetro pointer para marchar pela memória e examinar o conteúdo de outros endereços:
/* dump memory (fragment) */
void fLocal1(char * pch1)
{
int i;
for (i = 0; i < MAXSIZE; i++)
printf("%c ", *pch1++);
}
Quando um cliente passa um ponteiro para um procedimento remoto, o stub do cliente transmite o ponteiro e os dados para os quais aponta. A menos que o ponteiro esteja restrito aos dados correspondentes, toda a memória do cliente deve ser transmitida a cada chamada remota. Ao impor a digitação forte na definição da interface, o MIDL limita o processamento do stub do cliente aos dados que correspondem ao ponteiro especificado.
O tamanho da matriz e a gama de elementos da matriz transmitidos para o computador remoto podem ser constantes ou variáveis. Quando esses valores são variáveis e, portanto, determinados em tempo de execução, você deve usar atributos no arquivo IDL para especificar quantos elementos de matriz transmitir. Os seguintes atributos MIDL suportam limites de matriz.
Atributo | Descrição | Inadimplência |
---|---|---|
[ first_is] | Índice do primeiro elemento de matriz transmitido. | 0 |
[ last_is] | Índice do último elemento de matriz transmitido. | - |
[ length_is] | Número total de elementos de matriz transmitidos. | - |
[ max_is] | Maior valor de índice de matriz válido. | - |
[ min_is] | Menor valor de índice de matriz válido. | 0 |
[ size_is] | Número total de elementos da matriz alocados para a matriz. | - |
Observação
O atributo min_is não é implementado no RPC. O índice de matriz mínima é sempre tratado como zero.