StructLayout.Sequentialを使用してアンマネージド構造体のマネージバージョンを作成します(同じ順序で物事を入れてください)。あなたは、あなたが機能(例えば、検証(体mystruct [] pStructs)を管理するいずれかにそれを渡したいようにそれを渡すことができるはず
たとえば、私たちのネイティブ関数はこのプロトタイプを持っているとしましょう:。
extern "C" {
STRUCTINTEROPTEST_API int fnStructInteropTest(MYSTRUCT *pStructs, int nItems);
}
と、次のようにネイティブ体mystructが定義され、次のよう
struct MYSTRUCT
{
int a;
int b;
char c;
};
は、その後、C#で、あなたは、構造体の管理バージョンを定義します。
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct MYSTRUCT
{
public int a;
public int b;
public byte c;
}
し、管理プロトタイプは次のように:
[System.Runtime.InteropServices.DllImportAttribute("StructInteropTest.dll", EntryPoint = "fnStructInteropTest")]
public static extern int fnStructInteropTest(MYSTRUCT[] pStructs, int nItems);
あなたはその後、次のようにそれを体mystructの構造体の配列を渡す関数を呼び出すことができます。
static void Main(string[] args)
{
MYSTRUCT[] structs = new MYSTRUCT[5];
for (int i = 0; i < structs.Length; i++)
{
structs[i].a = i;
structs[i].b = i + structs.Length;
structs[i].c = (byte)(60 + i);
}
NativeMethods.fnStructInteropTest(structs, structs.Length);
Console.ReadLine();
}