Как это исправить, чтобы .jar мог вызывать метод из .dll тоже?
Startup.java:
Код: Выделить всё
package de.company;
import com.sun.jna.Library;
import com.sun.jna.Native;
public class Startup {
public interface LibInterface extends Library {
public String getA(int a, int b, int c, String d);
public String getB(int a, int b, int c, String d);
}
public static void main(String[] args){
System.out.println("hello world");
try{
LibInterface library = (LibInterface) Native.loadLibrary("NameOfLibraryWithoutDotDll", LibInterface.class);
System.out.println("Successfully loaded the library");
System.out.println("Result of the call: " + library.getA(1,2,3,"asdf"));
}catch(Exception e){
System.out.println("Exception: " + e.getMessage());
}
}
}
Код: Выделить всё
4.0.0
Test
de.company
1.0-SNAPSHOT
Test
Dinghy to test JNA
net.java.dev.jna
jna
4.2.1
${artifactId}
org.apache.maven.plugins
maven-dependency-plugin
copy-dependencies
prepare-package
copy-dependencies
${project.build.directory}/lib
false
false
true
org.apache.maven.plugins
maven-jar-plugin
true
lib/
de.company.Startup
привет, мир< /p>
Библиотека успешно загружена
Результат вызова: FooBar
Но когда я запускаю файл jar из командной строки, даже если он запущен с правами администратора, через:
Код: Выделить всё
mvn clean install
java -jar -Djna.debug_load=true target/test.jar
Привет, мир
Ищу в пути к классам от sun.misc.Launcher$AppClassLoader@55f96302 для /com/sun/jna/win32-x86-64/jnidispatch.dll
Найден ресурс библиотеки по адресу jar:file:/D:/dev/Test/target/lib/jna-4.2.1.jar!/com/sun/jna/win32-x86-64/jnidispatch.dll
Исключение в потоке «основной» java.lang.UnsatisfiedLinkError: C:\Users\CAA\AppData\Local\Temp\jna--517937128\jna2553495241482547583.dll: %1 не является допустимым приложением Win32
в java.lang.ClassLoader$NativeLibrary. load(собственный метод)
at java.lang.ClassLoader.loadLibrary0(неизвестный источник)
в java.lang.ClassLoader.loadLibrary(неизвестный источник)
в java.lang. Runtime.load0(неизвестный источник)
at java.lang.System.load(неизвестный источник)
at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:851)
at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:826)
на com.sun.jna.Native.(Native.java:140)
at de.company.Startup.main(Startup.java:17)
Подробнее здесь: https://stackoverflow.com/questions/792 ... oadlibrary
Мобильная версия