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




SWIG - это инструмент, который позволяет автоматически создавать привязки с одного языка к другому. Он поддерживает C++, Java и еще десяток языков.
Возможно, тогда я неправильно понял вопрос. Я не знаю, разрешит ли SWIG вам пойти в другом направлении.
Не уверен, что этот коммерческий инструмент упрощает жизнь, но вы можете изучить его - http://www.teamdev.com/jniwrapper/index.jsf
JNA - это не совсем то, что вы ищете, но он делает вашу жизнь намного проще. Для этого не требуется какой-либо шаблонный / сгенерированный код - вы просто пишете интерфейс для методов, которые хотите вызвать.
Конечно, есть все основания использовать JNA вместо JNI.
Если только скорость не является фактором (JNA на порядок медленнее, чем JNI)
Похоже, мой вопрос был недостаточно ясным. Может быть, путаница исходит от JNI, который разрешает доступ в направлениях кабины ...
Я хочу получить доступ к библиотеке Java ИЗ C++. То есть кто-то дал мне файл JAR, содержащий коллекцию скомпилированных классов JAVA, и я должен написать код на C++ для доступа к нему (поскольку я хочу интегрировать функциональность этой библиотеки Java в приложение C++).
Надеюсь, что это проясняет направление доступа :)
Спасибо,
Дас
У меня есть два предложения, которые могут сработать или не сработать для вас:
Во-первых, вы можете попробовать что-нибудь очень простое. Запустите код Java в отдельном процессе и взаимодействуйте с ним с помощью каналов или сокетов. Это довольно просто сделать и не требует каких-либо сумасшедших библиотек. Обратной стороной является то, что связь несколько ограничена (всего несколько простых каналов), вам нужно будет написать свою собственную оболочку вокруг нее, чтобы отправлять данные через
Во-вторых, что это за библиотека? Может быть, мы можем предложить альтернативы, написанные не на Java, которые было бы намного проще использовать в вашем приложении на C++?
Я думал, что SWIG создаст оболочку, чтобы сделать классы C++ доступными для Java (или любого другого поддерживаемого языка), а не наоборот (что мне нужно). Я исследую это. Спасибо.