Там инструменты должны интегрировать Java и C++?

perl -d Ваш друг:

% perl -de 0
7
задан Tim Sylvester 3 December 2009 в 22:25
поделиться

5 ответов

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

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

3
ответ дан 7 December 2019 в 05:24
поделиться

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

  • JNI
  • JNA
  • Swig
  • QTJambi

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

Другой подход - использовать процесс C ++ и взаимодействовать с ним, используя либо

  • командную строку
  • stdin / stdout

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

  • сокеты
  • CORBA
  • WebServices
  • Thrift

У них также есть кривая обучения и некоторые затраты на установку

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

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

2
ответ дан 7 December 2019 в 05:24
поделиться

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

1
ответ дан 7 December 2019 в 05:24
поделиться

Как насчет Thrift ?

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

1
ответ дан 7 December 2019 в 05:24
поделиться

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

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

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

1
ответ дан 7 December 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: