0

「fft.dll」と呼ばれるネイティブ C++ DLL と C# コンソール アプリケーションとの間の小さなテスト統合を作成しているところです。

fft.dll にはFourier、単一の静的メソッドを含む単一のクラスが含まれています。

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

静的メソッドfft(...)は単に配列の FFT を計算しcomplex<double>、計算された FFT を配列として返しますcomplex<double>

2 つの質問があります。

  1. この関数は s の配列を受け入れますが、complex<double>私の知る限り、.Net にはそのようなデータ構造は存在しません。関数に渡すデータをどのようにフォーマットできfft(...)ますか?
  2. 静的メンバーはクラス内にあるため、.Net コンソール アプリケーションで使用する場合、どの構文を使用すればよい[DllImport("fft.dll")]ですか?

ありがとう

編集:フォローアップの質問:こちら

4

2 に答える 2

1

P/Invoke は、静的クラス関数の呼び出しをサポートしておらず、C++ テンプレートをサポートおよび理解していません。

VinayC が提案したように、C++ dll に別のラッパー メソッドを記述します。これはグローバルであり、単純な double 配列と C++ 静的関数が使用しているテンプレート化された配列との間でデータをマーシャリングします。

于 2011-02-21T08:55:11.107 に答える
1

私の知る限り、.NETがそれを消費するには(dll-importを使用して)c/c++の世界で関数をエクスポートする必要があります。C++ のテンプレート化されたクラスを .NET の世界にマップする方法がわからないので、dll 内に C スタイルのラッパー関数を記述し、それをエクスポート リストに追加することをお勧めします。関数はヘルパー構造の配列を受け入れて返す必要があります ( に似てComplex<double>います)。これにより、構造を .NET ワールドにマップできます。関数はこの構造体から複雑なクラスに変換され、静的関数を呼び出します。

于 2011-02-21T05:17:14.137 に答える