Ну, это зависит от того, насколько тесно вы хотите интегрировать эти приложения и как вы видите их развитие в будущем.Если вы просто хотите передать данные между ними (например, вы хотите, чтобы один мог открыть файл, написанный другим, или прочитать поток непосредственно из другого), то я бы сказал, что протокол буферизует - ваша лучшая ставка.Если вы хотите, чтобы окно, отображаемое одним из этих приложений с графическим интерфейсом, действительно было встроено в панель другого приложения с графическим интерфейсом, то вам, вероятно, стоит использовать подход JNI.С подходом JNI вы можете использовать SWIG , чтобы автоматизировать большую его часть, хотя это опасно волшебно и имеет ряд предостережений (например, это не так хорошо с перегрузкой функций).
Я настоятельно рекомендую не использовать CORBA, RMI и аналогичные реализации удаленных вызовов процедур, в основном потому, что, по моему опыту, они имеют большой вес и потребляют много ресурсов.Если вы хотите что-то похожее на RMI, я бы порекомендовал что-то более легкое для передачи сообщений, но не для реальных объектов (как в случае с RMI).Например, вы можете использовать буферы протокола в качестве формата сообщения, а затем просто сериализовать их туда и обратно через обычные сокеты.
Кит Хо упомянул XML или JSON, но буферы протокола значительно более эффективны, чем любой из этих форматов, а также имеют понятия обратной совместимости, встроенные непосредственно в язык определения.