C ++在正在运行的JVM中调用函数

问题描述 投票:1回答:1

我想创建一个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,my from java in mymain)。我知道这有可能以某种方式但不知道该怎么做。我不知道从哪里开始,或者如何在C ++中这样做我已经尝试使用谷歌搜索,但还没有找到任何东西。

java c++ code-injection
1个回答
2
投票

您始终使用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

© www.soinside.com 2019 - 2024. All rights reserved.