Ошибка при подключении враппера и библиотеки, написанной на С, в коде на C#

Рейтинг: 0Ответов: 2Опубликовано: 06.06.2011

Скачал с сайта враппер и скачал библиотеку. Поместил dll враппер в папку с библиотекой, где лежат exe и неуправляемые dll и другие файлы библиотеки. Подключил dll враппер. Как я понял, враппер сам подключает библиотеку. Попробовал осуществить пример, на основе кода, предоставленного на первом сайте.

Но при первом же обращении к библиотеке

pin = fftwf.malloc(n*8);

вылезает ошибка:

Не удается загрузить DLL "libfftw3f-3.dll": Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E)

Использовал LoadLibrary, как написано в комментариях, но ничего не изменилось, ошибка все та же появляется.

Как же правильно подключить враппер и библиотеку?

Ответы

▲ 1Принят
[DllImport("kernel32.dll", CharSet=CharSet.Auto, SetLastError=true)]
static extern IntPtr LoadLibrary(string filename);

IntPtr handle = LoadLibrary(Path.GetFullPath(@"libfftw3f-3.dll"));

if (handle != IntPtr.Zero)
{
    // TODO: Работа с библиотечными методами
}
else
{
    int error = Marshal.GetLastWin32Error();

    // TODO: Обработка ошибки
}

Вообще часто еще бывает, что нативные библиотеки требуют дополнительных компонентов, которых нет на используемой машине, например, C Run-Time. Это можно проверить. Например, Dependency Walker - весьма удобная утилита для таких целей.

▲ 1

В конце этого топика на GotDotNet есть правильная последовательность действий. Смысл в том, что эта библиотека должна быть подгружена через WinAPI (kernel32.dll) функцию LoadLibrary.