Как импортировать функцию C ++ с параметрами int ** и double **

Я пытаюсь импортировать функцию C ++ в моем коде C #.

Эта функция определяется как:

int SetPointers(int* ID, int* BufferID, int** Pointer, double** Time, int NumberOfPointers);

с идентификатором массив int,
BufferId массив int,
Указатель на массив int,
Время массив двойных,
NumberOfPointers int.

Я пытался использовать IntPtr без успеха.

Вот последний код, который я пробовал:

[DllImport("open.dll", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public unsafe static extern int SetPointers(int* ID, int* BufferID, ref IntPtr Pointer, ref IntPtr Time, int NumberOfPointers);
public unsafe int _SetPointers(int[] ID, int[] BufferID, ref int[] Pointer, ref double[] Time, int NumberOfPointers)
{
IntPtr fQueue = IntPtr.Zero;
IntPtr fTime = IntPtr.Zero;
int breturn = -1;
fixed (int* fId = ID)
fixed (int* fBufferID = BufferID)
fQueue = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(int)) * Pointer.Length);
fTime = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * Timestamp.Length);
breturn = SetPointers(fId , fBufferID, ref fQueue, ref fTime, NumberOfPointers);
return breturn;
}

Есть идеи, как это сделать?

2

Решение

Прежде всего, вы можете использовать IntPtr для своих параметров, а не int [].
После этого я не пробовал это делать, но чтобы маршалировать указатели на указатели, сработали бы «ref IntPtr» или «out IntPtr».

public unsafe int _SetPointers(IntPtr ID, IntPtr BufferID, ref IntPtr Pointer, ref IntPtr Time, int NumberOfPointers);

Также взгляните на этот другой поток: Как мне маршалировать указатель на указатель массива структур?

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]