Свяжите java swing gui и c ++ backend для отдельного приложения, которое формирует два разных проекта.

Я хочу связать JAVA Swing GUI с C ++ бэкэнд для отдельного приложения. Эти два формируют два разных проекта. Я читал о Java родной Интерфейс. Хотя JNI кажется лучшим решением для этого, у меня есть несколько вопросов относительно JNI:

  1. Может ли JNI помочь мне связать различные проекты (один в Java Swing и другой
    в с ++)?
  2. Если да, как это будет отличаться от привязки к файлам в одном проекте?

Будучи новичком в JNI, будет полезна подробная техническая помощь.

1

Решение

  1. Да .

JNI помогает нам выполнять вызовы нашей собственной библиотеки C ++ из Java.

Я предполагаю, что вы планируете, чтобы GUI и C ++ были в одном процессе (если да, то JNI — ответ, если нет, вам придется прибегнуть к внутрипроцессному взаимодействию).

  1. Вам придется динамически связывать проекты из разных языков.

Java — это управляемая память, что означает, что вы не имеете истинного владения памятью (всемогущий ГК решает, удалит он что-либо или нет).

C ++ — неуправляемая память, а это означает, что вам придется собирать свой собственный мусор.

Учитывая это различие, совершенно очевидно, что при взаимодействии друг с другом вы должны быть уверены, что не удалили память, выделенную в одном из другого.

Это одно из отличий, которое вы столкнетесь с привязкой файлов в одном проекте.

Другая причина в том, что вы прибегаете к динамическому связыванию.

Код из Java компилируется в промежуточный, а код из C ++ компилируется в специфичный для CPU ассемблер. Это означает, что вы не можете использовать код из одного в другой.

Поэтому мы прибегаем к динамическому связыванию.

Код C ++ будет скомпилирован в общую библиотеку (.so или .dll в зависимости от платформы). Во время выполнения ваше Java-приложение Swing (которое будет точкой входа) загрузит динамическую библиотеку в память программы (вам нужно будет вызывать ее вручную из своего кода, System.loadLibrary — это функция, если я правильно помню).

Как только библиотека загружена, если вы правильно собрали библиотеку (для этого вам нужно следовать учебным пособиям, я не буду объяснять это здесь), вы получите экспортированные символы .dll в java.

Обычной практикой при использовании JNI является создание библиотеки мостов, которая связывает ряд функций C ++ с классом мостов в Java.

Существуют автоматические программы, которые создают этот мост для вас (например, SWIG), но я настоятельно рекомендую вам избегать их (особенно потому, что у вас нет полного понимания JNI).

0

Другие решения


По вопросам рекламы [email protected]