タイトルとして、Tamas SzalayのC# port of FFTWをVisual C#2010 Professional(試用版) 、私は2次元の変換を使用しようとすると、上記のエラーが発生しています。 (私がdft_c2r_2d()に切り替えると問題は解決しません)。他の関数(特に、fftw.malloc())はうまく動作します。FFTWLib(C#)の使用:vshostが実行されていない場合、fshw.exeまたはメインプログラムがクラッシュする
詳細:
unsafe void FFTFind(IntPtr Scan0, int stride, int width, int height, Rectangle roi)
{
IntPtr ComplexImage = fftw.malloc(width * height * 16);
double[] pComplexImage = new double[width * height * 2];
byte* pScan0 = (byte*)Scan0.ToPointer();
Console.WriteLine("3");
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
pComplexImage[x * y * 2] = pScan0[y * stride + x * 4];
//pComplexImage[x * y * 2] = pScan0[y * stride + x];
}
}
Console.WriteLine("3.05");
Marshal.Copy(pComplexImage, 0, ComplexImage, width * height * 2);
Console.WriteLine("Starting FFTFind");
FFTFindKernel(ComplexImage, stride, width, height, roi);
}
unsafe void FFTFindKernel(IntPtr imageIn, int stride, int width, int height, Rectangle roi)
{
Console.WriteLine("3.1");
IntPtr hScan0 = (IntPtr) GCHandle.Alloc(imageIn, GCHandleType.Pinned);
Console.WriteLine("3.3");
IntPtr FourierPlan;
Console.WriteLine("3.5");
int start = System.Environment.TickCount;
Console.WriteLine("3.7");
FourierPlan = fftw.dft_r2c_2d(width, height, hScan0, hScan0, 0);
Console.WriteLine("4");
fftw.execute(FourierPlan);
Console.WriteLine("Time: {0} ms", (System.Environment.TickCount - start));
}
"3.7" までのコンソール印刷されます。 FourierPlan = ...
を実行しようとすると、プログラムがクラッシュする原因となり、メッセージボックスがポップアップする:
vshost.exe has stopped working.
Visual Studioのホストプロセスを無効にするだけ「FFTFind」と「vshost.exe」を置き換えます。
おそらく関連があります:x64環境(Windows Server標準)で実行していますが、dllとプログラムはx86です。このpreviously caused a problem in Visual C# 2010 Expressは、Professional Trialに切り替えて、「x86」から「Any CPU」に手動で構成ターゲットを変更することで解決されました。
更新:提供されたテストコードを実行すると正常に動作します。
ネイティブメソッドのpinvokeかネイティブコードのバグを発見したようです。投稿していないので、どうすれば助けますか? –
私はどちらも書きませんでした。コードはTamas SzaleyのC#ポートの記事にリンクされています。あなたがそれが適切だと思うなら、私はそれについての電子メールを送ってきますが、これは時間の影響を受けやすいものなので、私は援助に感謝します。 – linkhyrule5
(オハイオ州とSzaleyは彼のソースを公開しており、使用法には制限がないので、それを遠く離れて欲しいなら、そのオプションがあります。私は、あなたが私に指示を与えるならば、私は盲目的に指示に従うことができます。) – linkhyrule5