У меня есть следующий метод C ++:
__ declspec (dllexport) void __stdcall getDoubles (int * count, double ** values);
метод выделяет и заполняет массив double и устанавливает * count в размер массива.
Единственный способ заставить это работать через pinvoke:
[System.Runtime.InteropServices.DllImportAttribute("xx.dll")]
public static extern void getDoubles(ref int count, ref System.IntPtr values);
и использование:
int count = 0;
IntPtr doubles = new IntPtr();
Nappy.getDoubles(ref count, ref doubles);
double[] dvs = new double[count];
for(int i = 0;i < count;++{
dvs[i] = (double)Marshal.PtrToStructure(doubles, typeof(System.Double));
doubles = new IntPtr(doubles.ToInt64()+Marshal.SizeOf(typeof(System.Double)));
}
значения попадают в массив dvs.
Есть ли лучший способ сделать это, не используя арифметику указателей в управляемом языке ...