Есть ли способ вызова библиотек STL C ++ из Java с использованием JNI? - PullRequest
0 голосов
/ 21 апреля 2009

Есть ли способ вызова библиотек STL из JNI, я полагаю, что JNI предоставляет C-подобный интерфейс для собственных вызовов, как нам этого добиться для библиотек шаблонов C ++?

Ответы [ 4 ]

2 голосов
/ 21 апреля 2009

Я согласен, что если вы ищете просто обычный STL, вы могли бы вместо этого использовать библиотеку Java. Однако, если вы настаиваете на переносе STL, SWIG предоставляет некоторую STL-упаковку в JNI «из коробки» (см. this для основного механизма), что должно привести к относительно стабильному, проверенному коду.

0 голосов
/ 07 мая 2017

Да. Вам необходимо использовать карту типов swig для преобразования классов C ++ STL в объекты Java ... и наоборот. Для получения дополнительной информации, пожалуйста, посетите, http://www.swig.org/Doc2.0/Android.html

0 голосов
/ 21 апреля 2009

Я должен спросить , почему вы считаете необходимым использовать библиотеки STL из Java. Есть ли в них что-то, чего нет в собственном огромном наборе библиотек Java?

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

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

0 голосов
/ 21 апреля 2009

Я знаю, что это возможно, хотя я сам этого не делал. Но код JNI может привести к сбою JVM, если вы не ОЧЕНЬ ОСТОРОЖНЫ. Кроме того, код JNI гораздо сложнее поддерживать, чем код Java. Я был в одном проекте, где Java -> JNI -> STL и COM-код были выброшены, и мы заменили его на C #, получая доступ к тем же STL и COM и сокету. Мы никогда не оглядывались назад.

Если вы используете только небольшое количество JNI, это может стоить того. Если вы создаете большой интерфейс через JNI, я настоятельно рекомендую вместо этого написать компонент, который взаимодействует с STL в C # вместо Java, и использовать сокет для взаимодействия между компонентами C # и Java. Это будет далеко легче писать, тестировать и поддерживать.

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