Как вызвать функцию в объектном файле c ++ из Java? - PullRequest
2 голосов
/ 02 июля 2019

У меня есть существующие cpp-файлы из проекта, которые я хотел бы использовать для моего приложения на Java.Я не могу изменить файлы cpp.Как я могу вызвать функции из Java?

Я работаю в Windows 10, используя JavaFX для своего приложения.Я видел несколько статей о JNI, но, похоже, ни одна из них не решила мою проблему.

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Если вы упакуете свою библиотеку в общий объект или dll, вы также можете использовать JNA: https://github.com/java-native-access/jna или https://github.com/java-native-access/jna/blob/master/www/GettingStarted.md

Например, у вас уже есть сопоставление с Windows API. Другой пример - отображение mediainfo в Java: https://github.com/andersonkyle/mediainfo-java-api/blob/master/src/main/java/org/apothem/mediainfo/api/MediaInfo.java

Обратите внимание, что, насколько я понимаю, это основано на JNI: это упрощает процесс, так как вам в основном нужно только объявить интерфейс на стороне Java и вызвать соответствующий метод.

2 голосов
/ 02 июля 2019

Если JNI или swig нежелательны или кажутся слишком низкими,

Действительно тупой подход - это обернуть .cpp в программу на c / c ++ и создать .exe, который выдает дамп в stdout / file. Затем выполните это в Java с помощью внешней команды оболочки.

Еще одна хорошая альтернатива -

Apache thrift

Это в основном обрабатывает все и, так сказать, везде (работает путем автоматической генерации кода для целевых языков), и я обычно рекомендую это в ситуациях RPC. Однако может потребоваться больше затрат на установку (в конце концов, это зависит от ваших реальных потребностей) - также, поскольку вам нужно разместить .cpp в службе, в вашем случае - локально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...