2012-06-15 2 views
0

мой вопрос в том, как вызвать исполняемый код Java из запуска кода на C++ и наоборот. Имеется несколько сообщений, связанных с вызовом скомпилированных файлов C++ из Java или JVM из C unsing Java Native Interface (JNI) или Java Native Access (JNA). Однако для меня это, похоже, не является адекватным способом вызова запущенного кода, поскольку в примерах вызывается только скомпилированные библиотеки.Вызов кода Java из запущенного кода на C++ и наоборот

Мое дело выглядит следующим образом. На локальном компьютере работают два приложения. Одно приложение - Eclipse и Java. Другое приложение основано на C++. Мне нужно заставить их общаться в обоих направлениях. Может быть, это относится к RPC? Но мне не нужно общаться через Интернет.

Я думаю, что RCP может быть способом, но мне кажется, это негабаритно для меня, поскольку я не хочу общаться через Интернет, и я не знаю, как использовать RCP в этом контексте. Я ищу более разумное решение.

Есть ли опыт, который может мне помочь?

Спасибо и наилучшими пожеланиями

Роб

+1

Доступны различные способы межпроцессного общения. Я всегда был поклонником именованного канала, но это может быть слишком просто абстракция для вас. Помните, что, хотя полноценный механизм RPC, способный работать в сети, может показаться немного переполненным, вы можете использовать существующие библиотеки для выполнения тяжелой работы, и это дает вам возможность распространять ваши приложения через сеть или несколько виртуальных машин на одном и том же хосте в будущее и т. д. – Rook

ответ

0

JNI позволяет связать C++ и Java-код; однако обе они являются одной и той же программой.

Если вы хотите, чтобы одна программа вызывала другую программу, самым простым способом является использование технологии с поддержкой сети. RPC, CORBA, клиент/серверные сокеты или любые другие средства, включая сеть, подойдут вам хорошо.

Существуют более сложные решения, не связанные с сетью, такие как разделяемая память, семафоры, трубы и т. Д .; однако им требуется операционная система, которая их поддерживает, и они могут быть ограничены тем, как они используются, плюс вам нужно будет найти привязки языков для обоих языков, используя их.

+0

Спасибо Эдвину! Но я не знаю, с чего начать. Должен ли я использовать RMI для вызова приложения C++ из Java? Какой RCP я могу использовать для вызова приложения Java из приложения C++? Я не знаю, что такое RCP. – user1459107

1

Возможно, вы захотите посмотреть мое решение на языке C++ для Java RPC. Учитывая класс Java, он генерирует заглушку клиента C++ и заглушку сервера Java.

https://github.com/danfickle/cppToJavaRpcStubGenerator

Edit: Я думаю, что CORBA является 'стандартным' решением. Тем не менее, 1000-страничная книга Java и CORBA, которую я имею на своей книжной полке (и не прочитал), предполагает, что есть кривая обучения. Вы также можете посмотреть в MessagePack, Thrift, ActiveMQ и т. Д. Извините, я не мог больше помочь.

+0

Спасибо, Дэниел! Тем не менее, RCP кажется слишком негабарит для меня и имеет некоторые проблемы с производительностью. Производительность важна для моего случая, так как оба моих приложения будут обмениваться миллионами сообщений за короткий промежуток времени. Является ли обмен сообщениями между локальным Java-приложением и локальным C++-приложением настолько необычным, что стандартного решения нет? – user1459107

Смежные вопросы