C#DLLImport'复杂'数组的返回和参数

时间:2011-02-21 04:55:57

标签: c# c++ interop dllimport complex-numbers

我只是在一个名为'fft.dll'的本机C ++ DLL和一个C#控制台应用程序之间编写一个小的测试集成。

fft.dll包含一个名为Fourier的类,它包含一个静态方法:

#include <complex>
using namespace std;
class Fourier
{
public:
    static complex<double>* fft(complex<double>*);
};

静态方法fft(...)只是计算complex<double>数组的FFT,并将计算出的FFT作为complex<double>数组返回。

我有两个问题:

  1. 该函数接受complex<double>的数组,但据我所知,.Net中不存在这样的数据结构。如何/我应该如何格式化数据以传递到fft(...)函数?
  2. 由于静态成员位于类中,因此在使用[DllImport("fft.dll")]时,我应该在.Net控制台应用程序中使用什么语法?
  3. 由于

    编辑: 后续问题:here

2 个答案:

答案 0 :(得分:1)

AFAIK,您必须在c / c ++世界中导出函数以便.NET使用它(使用dll-import)。我不确定如何在.NET世界中映射C ++模板化类 - 所以我建议您可以在dll中编写一个c风格的包装函数,将其添加到导出列表中。该函数应该接受并返回辅助结构数组(类似于Complex<double>),以便您可以在.NET世界中映射结构。您的函数将从此结构转换为复杂类并调用静态函数。

答案 1 :(得分:1)

P / Invoke不支持调用静态类函数,也不支持和理解C ++模板。

正如VinayC建议的那样,在C ++ dll中编写另一个包装器方法,它是全局的,它将简单双数组中的数据封送到C ++静态函数正在使用的模板化数组中。