Лучший способ получить доступ к классам Java из C++? (лучше, чем использовать JNI напрямую)

Мне нужно интегрировать большую библиотеку Java в довольно большое приложение на C++. Решение состоит в том, чтобы использовать JNI, но для этого необходимо передать код для всех классов. Например, у Python есть замечательное решение с JPype (http://jpype.sourceforge.net/), которое автоматизирует процесс (хотя одно и то же решение не может быть применено к C++ из-за разной природы C++ и Python).

Спасибо,

Дас

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
0
5 485
5

Ответы 5

SWIG - это инструмент, который позволяет автоматически создавать привязки с одного языка к другому. Он поддерживает C++, Java и еще десяток языков.

Я думал, что SWIG создаст оболочку, чтобы сделать классы C++ доступными для Java (или любого другого поддерживаемого языка), а не наоборот (что мне нужно). Я исследую это. Спасибо.

dasloop 08.10.2008 09:29

Возможно, тогда я неправильно понял вопрос. Я не знаю, разрешит ли SWIG вам пойти в другом направлении.

sk. 08.10.2008 20:04

Не уверен, что этот коммерческий инструмент упрощает жизнь, но вы можете изучить его - http://www.teamdev.com/jniwrapper/index.jsf

JNA - это не совсем то, что вы ищете, но он делает вашу жизнь намного проще. Для этого не требуется какой-либо шаблонный / сгенерированный код - вы просто пишете интерфейс для методов, которые хотите вызвать.

Конечно, есть все основания использовать JNA вместо JNI.

Если только скорость не является фактором (JNA на порядок медленнее, чем JNI)

user48956 17.04.2014 07:21

Похоже, мой вопрос был недостаточно ясным. Может быть, путаница исходит от JNI, который разрешает доступ в направлениях кабины ...

Я хочу получить доступ к библиотеке Java ИЗ C++. То есть кто-то дал мне файл JAR, содержащий коллекцию скомпилированных классов JAVA, и я должен написать код на C++ для доступа к нему (поскольку я хочу интегрировать функциональность этой библиотеки Java в приложение C++).

Надеюсь, что это проясняет направление доступа :)

Спасибо,

Дас

У меня есть два предложения, которые могут сработать или не сработать для вас:

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

Во-вторых, что это за библиотека? Может быть, мы можем предложить альтернативы, написанные не на Java, которые было бы намного проще использовать в вашем приложении на C++?

Другие вопросы по теме