通过jni返回指向java的类指针

slhcrj9b  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(467)

c++中存在一个类指针,如何通过jni在java中获得这个类指针和类的转换器
等级a\U b.cpp

Class ClassB
{
public:
    int funcA();
    int funcB();
}
Class ClassA
{
public:
    virtual void func(){B = new ClassB();};
    ClassB* B;
    ClassB* GetClassB(){return B;};
}

jni\ U a级\U b.cpp

ClassA TestClassA = new ClassA();

extern "C"
JNIEXPORT jobject JNICALL Java_com_core_Android_getClassB(JNIEnv *env, jobject thiz)
{
    return (jobject)TestClassA->GetClassB();    // It will crash, how to converter class pointer to jobject?
}

获取类B.java

public native ClassB getClassB();
public void TestFunction()
{
    ClassB B = getClassB();
}
inb24sb2

inb24sb21#

c中有一个现有的类指针++
不,没有。有一个指向classb示例的指针。
如何通过jni在java中获得类指针和类转换器
你不能。它们不是等价的。指向c++类示例的指针不能转换为对java类的引用。
总之,你的问题没有道理。

pbossiut

pbossiut2#

无法将指向c本机对象的指针(您所说的“类指针”)转换为 jobject . 事实上,如果你能做到这一点,你很可能会硬崩溃的jvm…'因为javagc无法处理c对象。
最好的方法是将c指针作为32位或64位整数传递/返回到java,然后如果java代码需要访问c对象的状态或调用其上的方法,则使用另一个jni调用。

相关问题