Не удается найти файл, необходимый для библиотеки DLL, которая вызывается с помощью JNA - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть dll (назовем его Sample.dll), который вызывается приложением Java через JNA. Указанная DLL находит файл в папке с именем «Данные». Я думаю, что указанный DLL был загружен успешно, так как не было возвращено сообщение об ошибке. Ниже приведен код для загрузки DLL:

sampleLibrary = (SampleLibrary)Native.loadLibrary("Sample", SampleLibrary.class);

После выполнения этого кода вызывается собственный метод для открытия сеанса. Этот метод принимает путь к папке в качестве параметра.

sampleLibrary.openSession(path);

JNA не может найти файл, так как возвращается ошибка, которая говорит, что файл не существует. Я пытаюсь установить и распечатать «user.dir» и «java.library.path», чтобы проверить, является ли пройденный путь правильным.

System.setProperty("java.library.path", "C:/Sample");
System.out.println("user.dir property: " + System.getProperty("user.dir"));
        System.out.println("java.library.path property: " + System.getProperty("java.library.path"));

Возвращает рабочий каталог, в котором находятся jar, dll и папка Data.

Структура файла:

C:\Sample
  \-- SampleJna.jar
  \-- Sample.dll
  \-- Data 
      \----- some files

1 Ответ

0 голосов
/ 08 ноября 2018

Во-первых, .loadLibrary устарела. Попробуйте вместо Native.load(). Пример ниже, как указано здесь :

SampleLibrary INSTANCE = (SampleLibrary) Native.load((Platform.isWindows() ? "Sample" : "c"), SampleLibrary.class);

Во-вторых, в свойствах вашего проекта в разделе «Параметры виртуальной машины» (если вы используете Netbeans) убедитесь, что путь к библиотеке объявлен так: -Djna.library.path=C:\Sample\

Если вы все еще получаете какую-либо ошибку, пожалуйста, опубликуйте свою трассировку стека, чтобы каждый мог проверить.

...