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

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

Спасибо

Das

Ответы [ 5 ]

4 голосов
/ 08 октября 2008

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

1 голос
/ 08 октября 2008

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

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

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

Спасибо

Das

0 голосов
/ 08 октября 2008

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

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

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

0 голосов
/ 08 октября 2008

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

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

0 голосов
/ 08 октября 2008

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

...