0

我只是在名为“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. 该函数接受一个 s 数组complex<double>,但据我所知,.Net 中不存在这样的数据结构。我如何/应该格式化我的数据以传递给fft(...)函数?
  2. 由于静态成员在一个类中,我应该在我的 .Net 控制台应用程序中使用什么语法[DllImport("fft.dll")]

谢谢

编辑:后续问题:这里

4

2 回答 2

1

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

于 2011-02-21T05:17:14.137 回答
1

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

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

于 2011-02-21T08:55:11.107 回答