C++有任何方式通过JNI访问java方法/函数本地变量和本地对象示例

htrmnn0y  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(179)
public class some_class
{
    public static void som_func() {
        var some_object = new SomeObject();
        var ret = 0;
        do
        {
            ret = some_object.DoSomething();
        } while(ret != 1);
        System.out.printf("Return value: %d", ret);
    }
}

现在在C++中,如果我这样调用:

auto some_cls = g_env->FindClass("some_class");
auto some_func = g_env->GetStaticMethodID(some_cls, "som_func", "()V");
g_env->CallStaticVoidMethod(some_cls, some_func);

有什么方法可以访问那个吗 some_object 变量 var some_object = new SomeObject(); 或者 ret 变量 var ret = 0; 通过jni或任何jvm内存访问技巧?
我想做一些类似的事情:

auto some_object_class = g_env->FindClass("SomeObject");
/* 
and then some way this 'some_object_class' will be a reference to that local variable 'some_object'

* /

我想我是想知道如何访问jvm的堆内存?我听说jvm在堆上分配一个对象,而对该分配对象的引用存储在堆栈上,如果是这样,我可以访问该堆栈内存并检索引用吗?我很困惑,我想我不知道我到底在说什么。请引导我走正确的路。

bvuwiixz

bvuwiixz1#

不行。请注意,您也不能从常规java方法访问这些局部变量。部分问题在于该方法不知道这些局部变量在哪里。它们可以在堆栈帧中分配,也可以在寄存器中分配。即使您实现了一些汇编代码来直接访问堆栈和寄存器,您也不知道应该在哪里查找,而且由于jvm代码编译的动态特性,位置可能会发生变化。

相关问题