さまざまな型の配列のマーシャリング
このサンプルでは、次の種類の配列を渡す方法を示します。
整数の配列を値渡しする方法。
整数の配列を参照渡しする方法。サイズを変更できます。
整数の多次元配列 (行列) を値渡しする方法。
文字列の配列を値渡しする方法。
整数を含む構造体の配列を渡す方法。
文字列を含む構造体の配列を渡す方法。
配列を明示的に参照渡しでマーシャリングする場合を除き、既定の動作により配列は 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 はカスタム アンマネージ ライブラリであり、上記の関数および 2 つの構造体変数 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 を適用する必要があります。