是的,您可以执行与C#中完全相同的操作。
要创建新的C ++对象:
jlongJava_package_name_new(JNIEnv *, jobject) { return (long)(new CPP_Object()); }您可以将此方法的返回值存储在Java
ptr变量中,并将其传递给需要它的所有NDK方法:
voidJava_package_name_doSomething(JNIEnv *, jobject, jlong ptr) { CPP_Object *obj = (CPP_Object *)ptr; // do whatever you want with the object}最后用类似以下的命令删除它:
voidJava_package_name_delete(JNIEnv *, jobject, jlong ptr) { delete (CPP_Object *)(ptr);}除了传递
ptr给需要它的所有方法外,您还可以使用
SetLongField和
GetLongField方法从NDK部分直接获取它并进行设置:这允许
ptr仅从代码的NDK部分管理Java
变量,我认为这更安全,并且更易于管理。



