找不到使用JNA调用的DLL所需的文件

时间:2018-11-05 04:56:54

标签: java dll jna nativelibrary

我有一个Java应用程序通过JNA调用的dll(将其命名为Sample.dll)。所述dll在名为“ Data”的文件夹内找到文件。我认为该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 :(得分:0)

首先,.loadLibrary被弃用。请尝试使用Native.load()。如here所述的以下示例:

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

第二,在“ VM选项”下的项目属性中(如果使用的是Netbeans),请确保库路径的声明如下:-Djna.library.path=C:\Sample\

如果仍然出现错误,请发布您的堆栈跟踪,以便所有人都可以检查。