(これが重複している可能性があることは理解していますが、他のスレッドはわかりません)
私は 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);
Cではint*
、ポインタですよね?だから、私が使用しなければならないのか、それとも(推奨)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# でこの関数を宣言するにはどうすればよいですか?