首页 > 代码库 > Android JNI之JAVA与C++对象建立对称关联(JNI优化设计,确保JNI调用的稳定性)
Android JNI之JAVA与C++对象建立对称关联(JNI优化设计,确保JNI调用的稳定性)
转载请声明:原文转自:http://www.cnblogs.com/xiezie/p/5930503.html
Android JNI之JAVA与C++对象建立对称关联
1.JAVA对象持有C++对象的指针
- 在JAVA类中创建一个int类型的变量(如int mObj),用于储存C++对象的指针
- 在创建C++对象(如MyCPlusObj)的本地方法中,将C++对象的指针存入JAVA变量中(mObj)
JNIEXPORT void JNICALL Java_nativeMethod(JNIEnv *env, jobject thiz) { MyCPlusObj *obj = new MyCPlusObj(); jclass clazz = (jclass)(*env).GetObjectClass(thiz); jfieldID fid = (jfieldID)(*env).GetFieldID(clazz, "mObj", "I"); (*env).SetIntField(thiz, fid, (jint)obj);}
- 如果要取得C++对象,则通过mObj的获取C++对象的指针
jclass objClazz = (jclass)env->GetObjectClass(obj);//obj为对应的JAVA对象jfieldID fid = env->GetFieldID(objClazz, "mObj", "I");jlong p = (jlong)env->GetObjectField(obj, fid);MyCPlusObj *cPlusObj = (MyCPlusObj *)p;//cPlusObj 为JAVA对象对应的C++对象
2.C++对象持有JAVA对象的引用
- 在C++类中创建一个jint类型的变量(如jint mObj),用于储存JAVA对象的引用
- 在创建C++对象时,储存JAVA对象的引用
jobject gThiz = (jobject)env->NewGlobalRef(thiz);//thiz为JAVA对象(*obj).javaObj = (jint)gThiz;
Android JNI之JAVA与C++对象建立对称关联(JNI优化设计,确保JNI调用的稳定性)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。