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.