(我知道这可能是重复的,但我不明白其他线程)
我正在使用 C# 我有一个第三方dll
需要 int 数组(或指向 int 数组的指针)作为参数。如何在 C# 和 C/C++ 之间编组一个 int 数组?函数声明如下:
// reads/writes int values from/into the array
__declspec(dllimport) void __stdcall ReadStuff(int id, int* buffer);
在 Cint*
中将是一个指针,对吗?所以我很困惑是否必须使用IntPtr
或是否可以使用int[]
(首选)?我认为这可能没问题:
[DllImport(dllName)]
static extern void ReadStuff(int id, [MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_I4)] ref int[] buffer);
// call
int[] array = new int[12];
ReadStuff(1, ref array);
那行得通吗?或者我如何在 C# 中以安全代码声明这个函数?