FFTW.NET DFT.FFT (pinIn, pinOut) вызывает исключение System.InvalidOperationException в веб-API - PullRequest
0 голосов
/ 12 марта 2019

Я хочу использовать FFTW.NET в .NET Core 2.1 WEB API. Когда я выполняю приведенный ниже фрагмент кода в действии, я получаю System.InvalidOperationException: 'IsAvailable returns false.' при DFT.FFT(pinIn, pinOut);

        Complex[] input = new Complex[1024];
        Complex[] output = new Complex[input.Length];

        //Initialize input         

        using (var pinIn = new PinnedArray<Complex>(input))
        using (var pinOut = new PinnedArray<Complex>(output))
        {
            DFT.FFT(pinIn, pinOut);
        }

Ниже приведена трассировка стека.

   at FFTW.NET.FftwPlan`2..ctor(IPinnedArray`1 buffer1, IPinnedArray`1 buffer2, Int32 rank, Int32[] n, Boolean verifyRankAndSize, DftDirection direction, PlannerFlags plannerFlags, Int32 nThreads)
   at FFTW.NET.FftwPlanC2C.Create(IPinnedArray`1 input, IPinnedArray`1 output, DftDirection direction, PlannerFlags plannerFlags, Int32 nThreads)
   at FFTW.NET.DFT.Transform(IPinnedArray`1 input, IPinnedArray`1 output, DftDirection direction, PlannerFlags plannerFlags, Int32 nThreads)
   at FFTW.NET.DFT.FFT(IPinnedArray`1 input, IPinnedArray`1 output, PlannerFlags plannerFlags, Int32 nThreads)
   at FFTW_WEB_API.Controllers.ValuesController.Get() in D:\FFTW_Test\FFTW_WEB_API\Controllers\ValuesController.cs:line 1059
   at lambda_method(Closure , Object , Object[] )
   at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
   at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()

Но тот же кусок кода отлично работает в консольном приложении .NET Core 2.1.

Пожалуйста, предложите, если я делаю что-то не так.

1 Ответ

1 голос
/ 12 марта 2019

IsAvailable вызывается внутренне, чтобы проверить, удовлетворен ли уровень взаимодействия - найден здесь .

Похоже, что он вернет false, если попытаться загрузить полученный Dllв DllNotFoundException (через GetVersionAndInitialize и _version).

Таким образом, нативные библиотеки DLL не в нужном месте для загрузки.Если неясно, в каких местах проверяются библиотеки DLL, вы можете использовать Process Monitor для поиска неудачных попыток проверки загрузки библиотек DLL.

...