Atributos de matriz e Sized-Pointer

MIDL fornece um conjunto avançado de recursos para passar matrizes de dados e ponteiros para dados. Você pode usar esses atributos para especificar características de matrizes e vários níveis de ponteiros.

Atributo Uso
size_is Especifica a quantidade de memória a ser alocada para ponteiros dimensionados, ponteiros dimensionados para ponteiros dimensionados e matrizes multidimensionais ou simples.
max_is O valor máximo de um índice de matriz.
length_is O número de elementos de matriz a serem transmitidos.
first_is O índice do primeiro elemento de matriz a ser transmitido.
last_is Fornece o índice do último elemento de matriz a ser transmitido.
string Indica que a matriz char unidimensional, wchar_t, byte (ou equivalente) ou o ponteiro para essa matriz deve ser tratado como uma cadeia de caracteres.
Gama Especifica um intervalo de valores permitidos para argumentos ou campos cujos valores são definidos em runtime.

 

MIDL dá suporte a três tipos de ponteiros: ponteiros de referência, ponteiros exclusivos e ponteiros completos. Esses ponteiros são especificados pelos atributos de ponteiro ref, unique e ptr.

Um atributo de ponteiro pode ser aplicado como um atributo de tipo; como um atributo de campo que se aplica a um membro da estrutura, membro da união ou parâmetro; ou como um atributo de função que se aplica ao tipo de retorno de função. O atributo de ponteiro também pode aparecer com o pointer_default palavra-chave.

Para permitir que um parâmetro de ponteiro seja alterado no valor durante uma função remota, você deve fornecer outro nível de indireção fornecendo vários declaradores de ponteiro. O atributo de ponteiro explícito aplicado ao parâmetro afeta apenas o declarador de ponteiro mais à direita para o parâmetro . Quando há vários declaradores de ponteiro em uma declaração de parâmetro, os outros declaradores assumem como padrão o atributo de ponteiro especificado pelo atributo pointer_default . Para aplicar atributos de ponteiro diferentes a vários declaradores de ponteiro, você deve definir tipos intermediários que especificam os atributos de ponteiro explícitos.

Valores de Pointer-Attribute padrão

Quando nenhum atributo de ponteiro está associado a um ponteiro que é um parâmetro, o ponteiro é considerado um ponteiro ref .

Quando nenhum atributo de ponteiro está associado a um ponteiro que é membro de uma estrutura ou união, o compilador MIDL atribui atributos de ponteiro usando as seguintes regras de prioridade (1 é mais alto):

  1. Atributos explicitamente aplicados ao tipo de ponteiro
  2. Atributos explicitamente aplicados ao parâmetro ou membro do ponteiro
  3. O atributo pointer_default no arquivo IDL que define o tipo
  4. O atributo pointer_default no arquivo IDL que importa o tipo
  5. ptr (modo osf); unique (modo padrão do Microsoft RPC)

Quando o arquivo IDL é compilado no modo padrão, os arquivos importados podem herdar atributos de ponteiro da importação de arquivos. Esse recurso não está disponível quando você compila usando a opção /osf . Para obter mais informações, consulte import.

Tipos de retorno de função

Um ponteiro retornado por uma função deve ser um ponteiro exclusivo ou um ponteiro completo. O compilador MIDL relatará um erro se um resultado de função for um ponteiro de referência, explicitamente ou por padrão. O ponteiro retornado sempre indica um novo armazenamento.

As funções que retornam um valor de ponteiro podem especificar um atributo de ponteiro como um atributo de função. Se um atributo de ponteiro não estiver presente, o ponteiro function-result usará o valor fornecido como o atributo pointer_default .

Atributos de ponteiro em definições de tipo

Quando você especifica um atributo de ponteiro no nível superior de uma instrução typedef , o atributo especificado é aplicado ao declarador de ponteiro, conforme esperado. Quando nenhum atributo de ponteiro é especificado, os declaradores de ponteiro no nível superior de uma instrução typedef herdam o tipo de atributo de ponteiro quando usados.

A IDL do DCE não permite que o mesmo atributo de ponteiro seja aplicado explicitamente duas vezes, por exemplo, na declaração typedef e na lista de atributos de parâmetro. Quando você usa o modo padrão (extensões da Microsoft) do compilador MIDL, essa restrição é reduzida.

Para obter uma discussão sobre como usar matrizes MIDL e ponteiros em chamadas de procedimento remoto, consulte Matrizes e ponteiros.