Использование FFTWLib (C #): не удается найти libfftw3-3.dll - PullRequest
0 голосов
/ 07 февраля 2012

Я пытаюсь использовать C # порт Тамаса Сзалая FFTW в Visual C # 2010, и я получаю вышеуказанную ошибку, когда пытаюсь использовать функцию из FFTW (в данном случае fftw.malloc).Эта ошибка исчезнет, ​​если я вручную переместу dll в папку проекта / bin / debug /, но затем получу

An attempt was made to load a program with an incorrect format.
(Exception from HRESULT: 0x8007000B)
Method: IntPtr malloc(Int32)

, что заставляет меня думать, что у меня есть более глубокая проблема.

ВозможноУместно: я запускаю это на компьютере с 64-разрядной версией, и DependencyWalker говорит, что fftwlib.dll создан для x86.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Просто хотел уточнить здесь кое-что, поскольку я делаю то же самое: я использую машину x64, но я установил платформу решения в Visual Studio на x86, чтобы я мог использовать редактирование и продолжить.

  1. Существуют как x86, так и x64 версии DLL FFTW. Я держу их в отдельных каталогах по понятным причинам.

  2. Если вы хотите принудительно использовать 32-разрядные библиотеки DLL, установите для своей платформы значение x86 и скопируйте 32-разрядные библиотеки DLL FFTW в начальный каталог проекта (по умолчанию используется везде, где он собирается; например, . \ Bin \ Debug).

Кроме того, мне пришлось добавить CallingConvention = CallingConvention.Cdecl) к каждому DLLImport выражению в FFTWlib , иначе VS2010 будет жаловаться.

1 голос
/ 07 февраля 2012

Вы должны установить конфигурацию CPU вашего проекта на x86 вместо Any CPU, если вы используете внешний 32-битный код.

Любой ЦП является конфигурацией Visual Studio по умолчанию, если вы работаете на 64-битной ОС, он по умолчанию будет компилироваться как 64-битный код, проблема в том, что если вам нужно загрузить 32-битные DLL, как в вашемВ этом случае вы получите ошибки формата.

http://cl.ly/3s1J2q3u3E0n2F2y0z1K <- скриншот, где он находится. </p>

...