Каждый раз, когда вы вызываете код C или C ++ из Java через JNI или аналогичный, вы рискуете дестабилизировать платформу Java из-за проблем с управлением памятью и / или безопасностью потоков на стороне C / C ++.
Прежде чем идти по маршруту JNI и т. Д., Я думаю, вам следует рассмотреть другие альтернативы:
- Выньте Java из уравнения и полностью внедрите его в C ++ (или C ++ / CC #, как кто-то еще предложил).
- Создайте приложение командной строки C ++, которое выполняет задачу, которую вам необходимо выполнить с помощью собственной библиотеки, и запустите приложение, используя один из методов
java.lang.Runtime.exec
.
- Создайте «серверную» оболочку в C ++ для библиотеки, которая предоставляет функции, необходимые вам в качестве настраиваемого протокола, и кодируйте сторону Java для взаимодействия с сервером, используя HTTP, необработанные сокеты, каналы или любой другой транспортный уровень, подходящий .
Все альтернативы имеют свои недостатки, но так же как и JNI / JNA и тому подобное; см. первый абзац.
РЕДАКТИРОВАТЬ: когда вы принимаете решение использовать JNI / JNA в системе, это может иметь долгосрочные последствия. Помимо проблемы со стабильностью, вы должны учитывать переносимость (будет ли собственная библиотека работать в Windows, Linux и т. Д.), Проблемы сборки (трудно собрать собственные библиотеки в Ant и т. Д.), Проблемы с версиями платформы (будет обновление до Java 7 что-нибудь сломать?), Навыки разработчика («Джо», который сделал интеграцию JNI, оставил - кто еще знает Java, C ++ и JNI?). Сумма этих вопросов (ИМО) более значительна, чем время, необходимое для первоначальной разработки.