Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
支持在JNI C+中添加/删除java对象+;_Java_C++_C_Android Ndk_Java Native Interface - Fatal编程技术网

支持在JNI C+中添加/删除java对象+;

支持在JNI C+中添加/删除java对象+;,java,c++,c,android-ndk,java-native-interface,Java,C++,C,Android Ndk,Java Native Interface,我的JNI代码中有一个模式,addObject(object)和removeObject(object)我需要在C/C++映射中添加一些东西,并使用这些方法将其删除 我已经说过了,它说您不应该期望对JNI的调用返回对同一对象的JNI方法的相同jobject引用 到目前为止,对于添加/删除,我的JNI如下所示: JNIEXPORT void JNICALL Java_com_nicholas_MyClass_addObject(JNIEnv *jenv, jobject thisObject, j

我的JNI代码中有一个模式,
addObject(object)
removeObject(object)
我需要在C/C++映射中添加一些东西,并使用这些方法将其删除

我已经说过了,它说您不应该期望对JNI的调用返回对同一对象的JNI方法的相同
jobject
引用

到目前为止,对于添加/删除,我的JNI如下所示:

JNIEXPORT void JNICALL Java_com_nicholas_MyClass_addObject(JNIEnv *jenv, jobject thisObject, jobject objectToAdd) {
    jobject newJavaObject = jenv->NewGlobalRef(objectToAdd);
    stdMap[newJavaObject] = //Some C++ Object;
}

JNIEXPORT void JNICALL Java_com_nicholas_MyClass_removeObject(JNIEnv *jenv, jobject thisObject, jobject objectToRemove) {
    jobject newJavaObject = jenv->NewGlobalRef(objectToAdd);
    stdMap[newJavaObject] = NULL;
}
执行此操作的最佳方式是什么?或者仅仅是这样:

JNIEXPORT void JNICALL Java_com_nicholas_MyClass_addObject(JNIEnv *jenv, jobject thisObject, jobject objectToAdd) {
    deviceListenerMap[objectToAdd] = //Some C++ Object;
}

JNIEXPORT void JNICALL Java_com_nicholas_MyClass_removeObject(JNIEnv *jenv, jobject thisObject, jobject objectToRemove) {
    deviceListenerMap[objectToRemove] = NULL;
}

我不确定deviceListenerMap的类型是什么,但如果可能,我会使用Java对象返回的hashCode()将其存储在映射中。确保你对“某些C++对象”的<强> >复制< /强>,ObjuttoAdad有适合你需要的正确。

JNIEXPORT void JNICALL Java_com_nicholas_MyClass_addObject(JNIEnv*jenv,jobject thisObject,jobject objectToAdd){

jclass classToAdd=GetObjectClass(jenv jobject objectToAdd)

jmethodID=GetMethodID(env,classToAdd,“hashCode”,V)I)

jint val=CallIntMethod(env,objectToAdd,id)

DeVeleListNeVMAP[VAL]=//某些C++对象;

}


这真是个好主意。非常感谢。