C ++ вызов функции внутри работающей JVM - PullRequest
1 голос
/ 21 марта 2019

Я хочу создать приложение C ++, которое будет вызывать функцию внутри работающего приложения Java. Это код для моего Java-приложения:

package me.jumpak.testapp;

public class TestClass {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }

    public static void mymain() {   // <=== I want to call this function
        System.out.println("Hello, World in java from mymain");
    }
}

Итак, я хочу, чтобы приложение C ++ каким-то образом «внедрило» в работающий процесс JVM и вызвало функцию mymain, чтобы оно выполнило функцию и напечатало сообщение (Hello, World in java от mymain). Я знаю, что это возможно, но не знаю, как это сделать. Я понятия не имею, с чего начать или как это сделать в C ++. Я пробовал поискать в Google, но пока ничего не нашел.

1 Ответ

2 голосов
/ 21 марта 2019

Вы всегда используете JNI из c ++ для создания или присоединения к существующему экземпляру jvm, а также для создания объектов или вызова методов ...

Что-то вроде ...

// Connect to an existing jvm
jint vm = JNI_GetCreatedJavaVMs(...

// Find the class
jclass cls = env->FindClass("your/namespace/Class");

// Get the method
jmethodID m = env->GetMethodID(clsm, "methodToInvoke", "()V");

// Call the method on the object
jobject res = env->CallObjectMethod(objInstance, m);

https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html

...