我有一个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
答案 0 :(得分:0)
首先,.loadLibrary
被弃用。请尝试使用Native.load()
。如here所述的以下示例:
SampleLibrary INSTANCE = (SampleLibrary) Native.load((Platform.isWindows() ? "Sample" : "c"), SampleLibrary.class);
第二,在“ VM选项”下的项目属性中(如果使用的是Netbeans),请确保库路径的声明如下:-Djna.library.path=C:\Sample\
如果仍然出现错误,请发布您的堆栈跟踪,以便所有人都可以检查。