我只是在一个名为'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>
数组返回。
我有两个问题:
complex<double>
的数组,但据我所知,.Net中不存在这样的数据结构。如何/我应该如何格式化数据以传递到fft(...)
函数?[DllImport("fft.dll")]
时,我应该在.Net控制台应用程序中使用什么语法?由于
编辑: 后续问题:here
答案 0 :(得分:1)
AFAIK,您必须在c / c ++世界中导出函数以便.NET使用它(使用dll-import)。我不确定如何在.NET世界中映射C ++模板化类 - 所以我建议您可以在dll中编写一个c风格的包装函数,将其添加到导出列表中。该函数应该接受并返回辅助结构数组(类似于Complex<double>
),以便您可以在.NET世界中映射结构。您的函数将从此结构转换为复杂类并调用静态函数。
答案 1 :(得分:1)
P / Invoke不支持调用静态类函数,也不支持和理解C ++模板。
正如VinayC建议的那样,在C ++ dll中编写另一个包装器方法,它是全局的,它将简单双数组中的数据封送到C ++静态函数正在使用的模板化数组中。