5

(これが重複している可能性があることは理解していますが、他のスレッドはわかりません)

私は 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# でこの関数を宣言するにはどうすればよいですか?

4

2 に答える 2