TopMetaFizick
@TopMetaFizick
Все двоит и троит...

Как передать данные из java-класса в нативный блок кода, написанного на C++?

Доброго времени суток, уважаемые кодеры. Мне нужно создать программку, где графическая часть будет написана на java, туда пользователь вводит значение A и B (к примеру), далее эти значения передаются нативному коду, написанному на c++ . Он, в свою очередь, решает сложное уравнение с переменными А и В и возвращает значение обратно. По отдельности я могу написать и код на С++, и на java, но ни как не могу заставит их подружиться. Нашел статейку на Хабрахабре, но ничего не выходит даже в самом начале. Вот ошибка, а ниже код.

"C:\Program Files\Java\jdk-9\bin\java" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2017.2.3\lib\idea_rt.jar=57525:C:\Program Files\JetBrains\IntelliJ IDEA 2017.2.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\lenovo\IdeaProjects\lab_2-3\out\production\lab_2-3 my.mega.pack.main 
Exception in thread "main" java.lang.UnsatisfiedLinkError: no NativeCallsClass in java.library.path 
at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2541) 
at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:873) 
at java.base/java.lang.System.loadLibrary(System.java:1857) 
at my.mega.pack.NativeCallsClass.<clinit>(NativeCallsClass.java:5) 
at my.mega.pack.main.main(main.java:6) 

Process finished with exit code 1


5ac0d74aa66e4879471897.png5ac0d75424732575968027.png5ac0d759901b2297540065.png
  • Вопрос задан
  • 359 просмотров
Пригласить эксперта
Ответы на вопрос 1
@AlexHell
Я не подскажу с тем подходом, который вы использовали.
Пробовал только такой тулзой https://github.com/nativelibs4java/JNAerator сгенерировал к уже существующему DLL (от стима) класс Java, в котором получилось вида
public interface LibrarySteamAppTicket extends Library {
byte SteamEncryptedAppTicket_BDecryptTicket(uint8 rgubTicketEncrypted, int cubTicketEncrypted, uint8 rgubTicketDecrypted, IntByReference pcubTicketDecrypted, Pointer rgubKey, int cubKey);
...
}

и вызывал так
private static LibrarySteamAppTicket Library = (LibrarySteamAppTicket) Native.loadLibrary("sdkencryptedappticket64" , LibrarySteamAppTicket.class);
// причем sdkencryptedappticket64.dll лежит рядом с jar при релизе (или в netBeans проекте в корне)

...
byte ret = Library.SteamEncryptedAppTicket_BDecryptTicket(..)

Причем DLL создана была явно не для java, а произвольную можно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы