|
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
|
|
Executing Java-code from C++-code via JNI18.09.2014, 11:29. Показов 6974. Ответов 24
Метки нет (Все метки)
Всем привет! Убежден, что ошибся с выбором раздела для публикации вопроса, но честно говоря, не знаю, куда его лучше поместить.
В общем, в чем суть. Вызов нативных методов из Java много где описан. Обратный же порядок взаимодействия - мало где. Моя проблема в том, что по существующим статьям мне не удается собрать и запустить всю эту беду. Если у кого-то есть соответствующий опыт, хотел бы просить что-нибудь типа пошаговой инструкции по написанию и процессу сборки простейшего приложения, которое просто вызывает из плюсового кода что-то тривиальное, написанное на Java. Надеюсь, такие мастера имеются)
0
|
|
| 18.09.2014, 11:29 | |
|
Ответы с готовыми решениями:
24
Ошибка The thread 0x390 has exited with code 0 (0x0). The program 'D:AlexVVCPr1DebugPr1.exe' has exited with code 0 (0x0). Неуправляемый код (unmanaged code) в управляемом коде (managed code) коды (например [code]�[/code]) русских символов |
|
|
|
| 22.10.2014, 15:33 | |
|
JVM после успешного создания перемещается в отдельный поток, поэтому плюсовый код будет работать с JVM из другого потока.
Добавлено через 33 минуты Да и код JNI вроде тоже в своем потоке выполняется, сейчас некогда разбираться.
1
|
|
|
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
|
|
| 23.10.2014, 15:33 [ТС] | |
|
Ребят, если у кого есть совет, буду благодарен!
Сейчас у меня имеется приложение на Java, которое в один прекрасный момент подгружает плюсовую динамическую библиотеку и запускает оттуда посредством JNI функцию, которая в свою очередь посредством JNI обращается к Java-библиотеке, т.е. получается так: Java -> C++ -> Java. Если убрать главное приложение на Java, то все уже протестировано и работает. Если же Выстраиваю цепочку, проиллюстрированную выше, то, как и ожидалось, плюсовая библиотека, подгруженная уже работающей JVM, не может сама создать новую JVM для себя. Т.е. JNI_CreateJavaVM - становится бесполезной в этом контексте функцией. Переворачивая интернеты с ног на голову, я наткнулся на такую же проблему, что и у меня, вот ссылка на stackoverflow: http://stackoverflow.com/quest... 7#26522377 Там так и не предложена альтернатива, а может и предложена вот в этом комментарии: You cannot create a JVM inside of an application already running in a JVM. You can only attach to it. In other words, only one instance of the JVM may run at anytime for a single instance of any application. Secondly, the calling conventions aren't there.. Since you cannot create the JVM inside of an already running Java app (which has its own JVM), env and jvm will be NULL. Но я тут конкретики не вижу и сам не смог найти пока. Можно ли все-таки как-то наладить такое взаимодействие, или это нереализуемо?
0
|
|
|
|
|||||||||||||||||
| 23.10.2014, 16:21 | |||||||||||||||||
|
А JNI_CreateJavaVM что возращает?
Добавлено через 21 минуту Я никогда подобным не занимался, но задача интересная. Смотри, в файле jni.cpp нашел функцию
Добавлено через 18 минут Опираясь на код из 3 поста можно попробовать так - при помощи JNI_GetCreatedJavaVMs получаем машины, проверяем, что они есть, берем первую машину, она будет в структуре
В penv тебе запишется вот что
Добавлено через 1 минуту
1
|
|||||||||||||||||
|
179 / 165 / 21
Регистрация: 12.02.2013
Сообщений: 410
|
||||||||||||||||
| 27.10.2014, 10:21 [ТС] | ||||||||||||||||
|
В общем, проблема решена)
Выложу здесь в двух словах. Может, у кого-то в будущем возникнет похожая проблема, а она, как мне показалось, тяжело гуглится. Вот код, который был у меня и работал, когда связка была следующей: C++ -> Java
Далее, когда связка стала сложнее: Java -> C++ -> Java, то создавать новую машину в рамках уже запущенного процесса нельзя, поэтому нужно присоединяться к уже запущенной. Поэтому модифицировал код выше так, чтобы он определял, что ему делать:
Вот. Остается, конечно, еще нерешенный вопрос о том, можно ли после аттача как-то известить VM о новых classpath вместо того, чтобы вводить их при запуске всего проекта, но данный момент в рамках задачи моей не критичен, поэтому пока ответа на него у меня нет. Может, у кого-нибудь есть? ![]() Kastaneda, да, спасибо, это все правильные были рекомендации, у меня, как оказалось, просто трудности были в доведении реализации до конца.
1
|
||||||||||||||||
| 27.10.2014, 13:10 | |
|
Не по теме: Залез на SO по ссылке, чтоб решение выложить, да смотрю тов. с ником ITcrusader уже это сделал :)
0
|
|
| 27.10.2014, 13:10 | |
|
IIS, ASP and SSI [code<!--#echo var='DATE_LOCAL'-->[/code] В чём заключается разница между компиляцией в P-code и Native-code? Передача строк data.php?code=$code&name=$name Visual Basic 5 компиляция в P-Code и в Native Code - различия
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы
Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
|
|
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока
Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
|
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
|
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат»
Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
|
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
|