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

Posted

技术标签:

【中文标题】找不到使用 JNA 调用的 DLL 所需的文件【英文标题】:Cannot Find The File needed by the DLL that is Called Using JNA 【发布时间】:2018-11-05 04:56:54 【问题描述】:

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

首先,.loadLibrary 已被弃用。请改用Native.load()。示例如下here:

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

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

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

【讨论】:

以上是关于找不到使用 JNA 调用的 DLL 所需的文件的主要内容,如果未能解决你的问题,请参考以下文章

java使用jna加载dll文件可以运行成功,打包后运行jar文件却找不到dll文件

为啥打开程序是总是显示“找不到所需的.DLL文件”

电脑开机后出现“找不到所需的DLL文件”这怎么处理啊

Qt 在 Windows 中部署应用程序所需的 dll

找不到编译动态表达式所需的一种或多种类型。您是不是缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?

nvspcap64.dll 找不到指定的模块