C # Marshalling double * à partir de C ++ DLL?

J'ai une DLL C++ avec une fonction exportée:

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

La fonction calcule la FFT de les deux tableaux (réel et imaginaire) renvoie un double tableau avec le réel de l'imaginaire composants entrelacé: { Re, Mi, Ré, Mi, ... }

Je ne sais pas comment appeler cette fonction en C#.
Ce que je fais est:

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

et quand je l'ai tester comme ceci:

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

- Je obtenir un MarshalDirectiveException exception:

Ne peut maréchal de "valeur de retour": les Invalides réussi/non géré type de combinaison.

Je suppose que c'est parce que le C++ double* n'est pas tout à fait la même qu'en C# double[]mais je ne suis pas sûr de la façon de le résoudre. Des idées?

Edit:
J'ai changé les signatures pour que je soit maintenant pass certaines informations supplémentaires:

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

Nous savons toujours la longueur de output sera 2x length

et

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

testé comme ceci:

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

Maintenant, je suis pas un AccessViolationException plutôt qu'un MarshalDirectiveException.

source d'informationauteur Ozzah