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();
}
2条答案
按热度按时间inb24sb21#
c中有一个现有的类指针++
不,没有。有一个指向classb示例的指针。
如何通过jni在java中获得类指针和类转换器
你不能。它们不是等价的。指向c++类示例的指针不能转换为对java类的引用。
总之,你的问题没有道理。
pbossiut2#
无法将指向c本机对象的指针(您所说的“类指针”)转换为
jobject
. 事实上,如果你能做到这一点,你很可能会硬崩溃的jvm…'因为javagc无法处理c对象。最好的方法是将c指针作为32位或64位整数传递/返回到java,然后如果java代码需要访问c对象的状态或调用其上的方法,则使用另一个jni调用。