Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用FFTWLib(C#):如果vshost未运行,则使用fftw.dft_r2c_2d()会使vshost.exe或主程序崩溃_C#_Fft_Fftw - Fatal编程技术网

使用FFTWLib(C#):如果vshost未运行,则使用fftw.dft_r2c_2d()会使vshost.exe或主程序崩溃

使用FFTWLib(C#):如果vshost未运行,则使用fftw.dft_r2c_2d()会使vshost.exe或主程序崩溃,c#,fft,fftw,C#,Fft,Fftw,正如标题所述:我试图在Visual C#2010 Professional(试用版)中使用Tamas Szalay的,当我尝试使用二维变换时,我得到了上述错误。(当我切换到dft_c2r_2d()时,问题仍然存在)。其他函数(特别是fftw.malloc())工作正常 详情: unsafe void FFTFind(IntPtr Scan0, int stride, int width, int height, Rectangle roi) { IntPtr ComplexImage =

正如标题所述:我试图在Visual C#2010 Professional(试用版)中使用Tamas Szalay的,当我尝试使用二维变换时,我得到了上述错误。(当我切换到dft_c2r_2d()时,问题仍然存在)。其他函数(特别是fftw.malloc())工作正常

详情:

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));
}
禁用Visual Studio主机进程只会将“vshost.exe”替换为“FFTFind”

可能相关:我在x64环境(Windows服务器标准)中运行这个,但是DLL和程序是x86。这是通过切换到专业试用版,然后手动将配置目标从“x86”更改为“任意CPU”来解决的


更新:运行提供的测试代码工作正常。

事实证明,计划函数不能使用“伪”指针-它们指向的数组必须初始化。回想起来,这应该是显而易见的…

您似乎在本机方法的pinvoke中发现了一个bug,或者在本机代码中发现了一个bug。你也没发过帖子,我们能帮上什么忙吗?我也没写——代码链接在帖子中,塔马斯·萨雷的C#port。如果你认为合适的话,我会发一封电子邮件告诉你,但由于这对时间很敏感,我非常感谢你的帮助。(哦,Szaley出版了他的资料来源,并且没有使用限制,所以如果你愿意走那么远,就有这个选择。恐怕我对图书馆还不太熟悉,不知道要复制什么,但如果你给我指示,我可以盲目地按照指示去做。)请注意,免费工作的人可能不太关心时间敏感性。我知道我不会免费阅读完整项目的来源,希望这里有人在项目团队工作或慷慨大方(而且很无聊)足以为您解决问题。如果您确实找到了人,他们的解决方案很可能是构建一个像您这样的测试用例,并通过调试器运行它…当您这样做时会发生什么?我知道,指望StackOverflow相对较大的容量来补偿。我并不是说我不能发布代码片段-我只是不知道复制什么。
vshost.exe has stopped working.