Как вызвать функции Java из C ++? - PullRequest
46 голосов
/ 04 мая 2009

Как я могу вызвать функции Java из приложения C ++?

Я знаю, как вызывать их из CMD (или схожих методов), но я бы не стал их использовать.

Ответы [ 6 ]

21 голосов
/ 04 мая 2009

В качестве примера отметьте Создание JVM из C . Он показывает пример процедуры для создания JVM и вызова метода. Если JVM уже существует; например ваша C-программа вызывается Java-программой (ситуация обратного вызова), вы можете кэшировать указатель JNIEnv *.

В качестве совета, будьте осторожны при кэшировании указателей на JVM из C / C ++, есть некоторая семантика, касающаяся того, что вы можете кэшировать, и это может быть вызвано позже. Для этого, как указал Брайан Агнью, проверьте ссылку на JNI.

17 голосов
/ 04 мая 2009

Проверьте Интерфейс вызова JNI . Это позволит вам встроить JVM в ваше приложение C (или C ++).

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

3 голосов
/ 14 марта 2013

Эта страница полезна: http://hildstrom.com/projects/jni/index.html

Предположим, у вас есть класс Java:

package foo;
public class bar {
    public static int timesTen(int input){
        return input * 10;
    }
}

Если у вас есть JVM и JNIEnv * (подробности пропущены ...), вы можете вызвать метод Java из C ++ следующим образом:

jclass myClass = env->FindClass("foo.bar");
jmethodID mid = env->GetStaticMethodID(myClass, "timesTen", "(I)I");
jint hundred = env->CallStaticIntMethod(myClass, mid, (jint)10);

Это скрывает детализацию lot , включая обработку исключений, которая, если ее пропустить, приведет к сбою JVM. Чтобы узнать все подробности, найдите «Java Native Interface» и перейдите по ссылкам Oracle.

2 голосов
/ 04 мая 2009

Читать на JNI .

1 голос
/ 04 мая 2009
0 голосов
/ 29 июля 2016

Другой простой способ вызова методов Java из CPP - через командный файл.

system() 

Метод вызова exe или bat файлов из CPP. Поместите свой класс с путем java и classpath в пакетный файл и вызовите этот пакетный файл из CPP, используя system("batch-file-name.bat")

Это легко и прямо.

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