C++ 在 运行 JVM 中调用一个函数
C++ Call a function inside a running JVM
我想创建一个 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++ 应用程序以某种方式 "inject" 进入 运行 JVM 进程并调用函数 mymain
因此它将执行该函数并打印消息 (Hello, World在来自 mymain 的 java 中)。我知道这是可能的,但不知道该怎么做。
我不知道从哪里开始,也不知道如何在 C++ 中执行此操作我已经尝试使用谷歌搜索,但还没有找到任何东西。
您总是使用 C++ 中的 JNI 创建或附加到现有的 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
我想创建一个 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++ 应用程序以某种方式 "inject" 进入 运行 JVM 进程并调用函数 mymain
因此它将执行该函数并打印消息 (Hello, World在来自 mymain 的 java 中)。我知道这是可能的,但不知道该怎么做。
我不知道从哪里开始,也不知道如何在 C++ 中执行此操作我已经尝试使用谷歌搜索,但还没有找到任何东西。
您总是使用 C++ 中的 JNI 创建或附加到现有的 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