0

我有一个由 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
4

1 回答 1

0

首先,.loadLibrary正在弃用。试试Native.load()吧。下面的示例如下所述:

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

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

如果您仍然遇到一些错误,请发布您的堆栈跟踪,以便每个人都可以检查。

于 2018-11-08T03:02:00.107 回答