Compartilhar via


Empacotamento de tipos diferentes de Arrays

Este exemplo demonstra como passar os seguintes tipos de arrays:

  • Matriz de inteiros por valor.

  • Matriz de inteiros por referência, que podem ser redimensionadas.

  • Matriz multidimensional (matriz) de inteiros por valor.

  • Matriz de seqüências de caracteres por valor.

  • Matriz de estruturas com inteiros.

  • Matriz de estruturas com seqüências de caracteres.

A menos que explicitamente, uma matriz é empacotada por referência, o comportamento padrão empacota a matriz como um parâmetro de entrada. Você pode alterar esse comportamento, aplicando o InAttribute e OutAttribute atributos explicitamente.

O exemplo de Arrays utiliza as seguintes funções não gerenciadas, mostradas com sua declaração de função original:

  • TestArrayOfInts exportados do PinvokeLib.dll.

    int TestArrayOfInts(int* pArray, int pSize);
    
  • TestRefArrayOfInts exportados do PinvokeLib.dll.

    int TestRefArrayOfInts(int** ppArray, int* pSize);
    
  • TestMatrixOfInts exportados do PinvokeLib.dll.

    int TestMatrixOfInts(int pMatrix[][COL_DIM], int row);
    
  • TestArrayOfStrings exportados do PinvokeLib.dll.

    int TestArrayOfStrings(char** ppStrArray, int size);
    
  • TestArrayOfStructs exportados do PinvokeLib.dll.

    int TestArrayOfStructs(MYPOINT* pPointArray, int size);
    
  • TestArrayOfStructs2 exportados do PinvokeLib.dll.

    int TestArrayOfStructs2 (MYPERSON* pPersonArray, int size);
    

PinvokeLib.dll é uma biblioteca de não gerenciada personalizada que contém implementações para as funções listadas anteriormente e duas variáveis de estrutura, MYPOINT e MYPERSON. As estruturas de contenham os seguintes elementos:

typedef struct _MYPOINT
{
   int x; 
   int y; 
} MYPOINT;

typedef struct _MYPERSON
{
   char* first; 
   char* last; 
} MYPERSON;

Neste exemplo, o MyPoint e MyPerson estruturas contêm tipos incorporados. O StructLayoutAttribute atributo está definido para garantir que os membros são organizados na memória seqüencialmente, na ordem em que aparecem.

O LibWrap classe contém um conjunto de métodos chamados pelo App classe. Para obter detalhes específicos sobre matrizes de passagem, consulte os comentários no exemplo a seguir. Uma matriz, o que é um tipo de referência, é passada como um parâmetro de entrada por padrão. Para o chamador receber os resultados InAttribute e OutAttribute deve ser aplicado explicitamente para o argumento que contém a matriz.

Consulte também

Conceitos

Matrizes de tipos de empacotamento.

Tipos de dados de invocação de plataforma

A criação de protótipos em código gerenciado