Как создать дерево json из django-mptt?

] Я хочу использовать JavaScript InfoVis Tooljit ( http: // thejit. org ), чтобы отобразить дерево узлов mptt в django.Как я могу создать требуемую структуру json (см. http://thejit.org/static/v20/Jit/Examples/Spacetree/example1.code. {[...] } Функция вычисляет БПФ двух двойных массивов (...

У меня есть C ++ DLL с экспортированной функцией:

extern "C" __declspec(dllexport) double* fft(double* dataReal, double* dataImag)
{
  [...]
}

Функция вычисляет БПФ двух двойных массивов (действительного и мнимого) и возвращает одиночный двойной массив с чередованием реальных и мнимых компонентов: {Re, Im, Re, Im, ...}

Я не знаю, как вызвать эту функцию в C #. Что я делаю:

[DllImport("fft.dll")]
static extern double[] fft(double[] dataReal, double[] dataImag);

и когда я тестирую это следующим образом:

double[] foo = fft(new double[] { 1, 2, 3, 4 }, new double[] { 0, 0, 0, 0 });

я получаю исключение MarshalDirectiveException:

Невозможно маршалировать «возвращаемое значение»: недопустимая комбинация управляемого / неуправляемого типа.

Я предполагая, что это потому, что C ++ double * не совсем то же самое, что C # double [] , но я не уверен, как это исправить. Есть идеи?

Изменить: Я изменил подписи, поэтому теперь передаю дополнительную информацию:

extern "C" __declspec(dllexport) void fft(double* dataReal, double* dataImag, int length, double* output);

Мы всегда знаем, что длина вывода будет 2x length

и

[DllImport("fft.dll")]
static extern void fft(double[] dataReal, double[] dataImag, int length, out double[] output);

проверяется следующим образом:

double[] foo = new double[8];
fft(new double[] { 1, 2, 3, 4 }, new double[] { 0, 0, 0, 0 }, 4, out foo);

Теперь я получаю исключение AccessViolationException, а не MarshalDirectiveException.

12
задан Ozzah 21 February 2011 в 23:46
поделиться