StructLayout.Sequential을 사용하여 관리되지 않는 구조체의 관리되는 버전을 만듭니다 (동일한 순서로 배치해야 함). 당신이) (모든 관리 기능에 예를 들어, 검증 (MYSTRUCT [] pStructs을 전달할 것처럼 당신은 다음을 통과 할 수있을 것입니다 예를 들어
,의는 우리의 고유 기능이 프로토 타입이 말을 보자.
extern "C" {
STRUCTINTEROPTEST_API int fnStructInteropTest(MYSTRUCT *pStructs, int nItems);
}
을 다음과 같이
는
struct MYSTRUCT
{
int a;
int b;
char c;
};
그런 다음 C#으로, 당신은 구조체의 관리 버전을 정의 : 다음과 같이
및 기본 MYSTRUCT 정의된다
[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();
}