이 샘플에서는 다음의 배열 형식을 전달하는 방법을 보여 줍니다.
정수 배열을 값으로
정수 배열을 참조로(크기 조정 가능)
다차원 정수 배열(매트릭스)을 값으로
문자열 배열을 값으로
정수가 포함된 구조체의 배열
문자열이 포함된 구조체의 배열
배열이 명시적으로 참조로 마샬링되지 않는 경우 기본 동작은 배열을 In 매개 변수로 마샬링하는 것입니다. InAttribute 및 OutAttribute 특성을 명시적으로 적용하면 이 동작을 변경할 수 있습니다.
Arrays 샘플에서는 다음의 관리되지 않는 함수를 사용합니다. 이 함수들은 원래의 함수 선언과 함께 표시되어 있습니다.
PinvokeLib.dll에서 내보낸 TestArrayOfInts
int TestArrayOfInts(int* pArray, int pSize);
PinvokeLib.dll에서 내보낸 TestRefArrayOfInts
int TestRefArrayOfInts(int** ppArray, int* pSize);
PinvokeLib.dll에서 내보낸 TestMatrixOfInts
int TestMatrixOfInts(int pMatrix[][COL_DIM], int row);
PinvokeLib.dll에서 내보낸 TestArrayOfStrings
int TestArrayOfStrings(char** ppStrArray, int size);
PinvokeLib.dll에서 내보낸 TestArrayOfStructs
int TestArrayOfStructs(MYPOINT* pPointArray, int size);
PinvokeLib.dll에서 내보낸 TestArrayOfStructs2
int TestArrayOfStructs2 (MYPERSON* pPersonArray, int size);
PinvokeLib.dll은 이러한 함수와 두 개의 구조체 변수인 MYPOINT 및 MYPERSON에 대한 구현이 포함된, 관리되지 않는 사용자 지정 라이브러리입니다. 이 구조체에는 다음 요소가 포함되어 있습니다.
typedef struct _MYPOINT
{
int x;
int y;
} MYPOINT;
typedef struct _MYPERSON
{
char* first;
char* last;
} MYPERSON;
이 샘플에서, MyPoint 및 MyPerson 구조체에는 포함된 형식이 포함되어 있습니다. 멤버가 나타나는 순서에 따라 메모리에 순차적으로 정렬되도록 StructLayoutAttribute 특성이 설정됩니다.
LibWrap 클래스에는 App 클래스에서 호출하는 메서드 집합이 포함되어 있습니다. 배열 전달에 대한 자세한 내용은 다음 샘플을 참조하십시오. 참조 형식인 배열은 기본적으로 In 매개 변수를 통해 전달됩니다. 호출자가 결과를 받으려면 해당 배열이 포함된 인수에 InAttribute 및 OutAttribute가 명시적으로 적용되어야 합니다.