C ++中有一个现有的类指针 如何通过JNI
将此类指针和转换器转换为java类Class_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;};
}
Jni_Class_A_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?
}
GetClassB.java
public native ClassB getClassB();
public void TestFunction()
{
ClassB B = getClassB();
}
答案 0 :(得分:2)
无法将指针转换为C ++本机对象(将其放入“类指针”)到jobject
。实际上,如果你可以这样做,你很可能会使JVM硬崩溃......“因为Java GC无法应对C ++对象。
您可以做的最好的事情是将C ++指针作为32位或64位整数传递给Java,然后如果Java代码需要访问C ++对象的状态或调用其上的方法,则使用另一个JNI调用
答案 1 :(得分:0)
C ++中有一个现有的类指针
不,没有。有一个指向ClassB的实例的指针。
如何通过JNI
将此类指针和转换器转换为java类
你做不到。他们并不等同。指向C ++类实例的指针无法转换为对Java类的引用。
简而言之,你的问题没有意义。