通过JNI返回指向Java的类指针 C++中存在一个现有的类指针 如何通过JNI在java中获得这个类指针和类的转换器

通过JNI返回指向Java的类指针 C++中存在一个现有的类指针 如何通过JNI在java中获得这个类指针和类的转换器,java,android,c++,java-native-interface,Java,Android,C++,Java Native Interface,类别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;}; } ClassA TestClassA = new ClassA(); extern "C" JNIEXPORT jo

类别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;};
}
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?
}
Jni_类A_B.cpp

Class ClassB
{
public:
    int funcA();
    int funcB();
}
Class ClassA
{
public:
    virtual void func(){B = new ClassB();};
    ClassB* B;
    ClassB* GetClassB(){return B;};
}
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?
}
GetClassB.java

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

当你把指针放进一个JOBJET中时,没有办法将指针转换成C++指针。事实上,如果你能做到这一点,你很可能会使JVM硬崩溃因为java GC不能处理C++对象。 <>你最好做的是将C++指针传递给java作为32位或64位整数,然后如果java代码需要访问C++对象的状态或调用方法,则使用另一个JNI调用。 C中存在一个现有的类指针++

不,没有。有一个指向ClassB实例的指针

如何通过JNI在java中获得这个类指针和类的转换器

你不能。它们并不等同。指向C++类实例的指针不能转换为对java类的引用。

简言之,你的问题毫无意义