Существуют ли инструменты для интеграции Java и C ++? - PullRequest
7 голосов
/ 04 декабря 2009

спасибо за чтение этого вопроса.

Я делаю эту домашнюю работу, которой нужен графический интерфейс для интеграции с внутренним кодом, написанным на C ++.

Я хочу написать этот графический интерфейс на языке Java как кроссплатформенную функцию и мощные графические компоненты.

Есть ли какой-нибудь хороший способ хорошо интегрировать Java и C ++?

Спасибо

Ответы [ 5 ]

3 голосов
/ 04 декабря 2009

Swig работает очень хорошо. Это средство привязки C / C ++ к огромному разнообразию языков. У меня есть опыт использования этого для общения с C ++ с очень небольшим горем. Вот справочная страница по совместному использованию Swig и Java. Учебное пособие поможет вам быстро освоить множество примеров, включая Java.

Я бы, однако, исследовал разбиение вашего приложения на архитектуру клиент / сервер, чтобы отделить бэкэнд C ++ от внешнего интерфейса Java. Вы избежите проблем с разработкой и интеграцией на C ++ / Java = хотя вам придется реализовать некоторый протокол связи между внешним и внутренним интерфейсом в зависимости от требований (например, базовые сокеты / веб-сервис / HTTP + REST или, возможно, CORBA - который изначально присутствует Java и предназначен для межъязыкового общения).

2 голосов
/ 04 декабря 2009

Предполагая, что серверный компонент находится на той же машине, вы можете использовать интерфейсный слой, как описано другими

  • JNI
  • ЮНА
  • Swig
  • QTJambi

Все это требует, чтобы ваш бэкэнд c ++ был доступен в dll и обычно предоставлял прокси Java для функций C и иногда классов c ++. Для всего этого есть кривая обучения, и некоторые из них работают для включения прокси.

Другим подходом может быть использование процесса c ++ и взаимодействие с ним с помощью

  • командная строка
  • STDIN / STDOUT

Если вы хотите поддерживать связь по сети

  • розетки
  • 1028 * CORBA *
  • WebServices
  • Бережливость

Они также имеют кривую обучения и некоторые затраты на настройку

Из них командная строка или stdin / stdout, вероятно, быстрее всего работают с минимальными затратами усилий и знаний. Однако он плохо масштабируется для больших интерфейсов, поскольку вы должны закодировать ввод и вывод каждого сообщения в виде текста

Для подхода командной строки вы выполняете процесс c ++, используя параметры командной строки для параметров, результаты либо считываются из стандартного процесса, либо из его кода выхода.

Для stdin / stdout вы запускаете процесс, каждый запрос отправляется на stdin процесса, а результаты считываются из stdout.

1 голос
/ 04 декабря 2009

Если вы сами не пишете бэкэнд-библиотеку C ++, а просто хотите использовать стороннюю библиотеку, лучшей альтернативой будет использование JNA .

Основным преимуществом использования JNA над JNI в этом случае является то, что весь мостовой код написан на Java (а не на родном языке, C ++ в вашем случае). Это означает, что вам не нужно усложнять процесс сборки за счет создания интерфейсов JNI в C ++, вся работа с интерфейсами будет написана на языке основного проекта.

Если, однако, вы пишете бэкэнд C ++ самостоятельно, то в равной степени применимы любые другие уже предоставленные опции.

1 голос
/ 04 декабря 2009

Как насчет Экономия ?

Thrift - это программная структура для разработки масштабируемых кросс-языковых сервисов. Он объединяет программный стек с механизмом генерации кода для создания сервисов, которые эффективно и без проблем работают между C ++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C #, Cocoa, Smalltalk и OCaml.

1 голос
/ 04 декабря 2009

Посмотрите на JNI (собственный интерфейс Java). У Sun есть онлайн-книга по JNI .

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