当我从 C++ 调用 Java 方法时,我应该调用 PushLocalFrame 和 PopLocalFrame 吗?
Should I call PushLocalFrame and PopLocalFrame when I call Java Method From C++?
问题一:
我有一个 java class 和静态方法:
class Test {
static public void show (String value) {
// dosomething with value
}
}
如果我想从 C++ 调用它:
jstring value = env->NewStringUTF("Hello, World");
// ExceptionCheck after NewStringUTF.
env->CallStaticVoidMethod(the_jclass, the_jmethodID, value);
// ExceptionCheck after CallStaticVoidMethod.
我应该把 PushLocalFrame 放在 NewStringUTF 之前,然后把 PopLocalFrame 放在 之后吗CallStaticVoidMethod 释放本地引用?
问题 2:
我看到 PopLocalFrame 的声明,它是:
jobject PopLocalFrame(JNIEnv *env, jobject result);
看了jni文档,还是不明白为什么PopLocalFrame需要一个结果参数和一个return值.能否举个例子说明它的存在价值?
Should I put PushLocalFrame
before NewStringUTF
and put PopLocalFrame
after CallStaticVoidMethod
to release local references?
在这种特殊情况下,我不明白这一点。您可以只使用 DeleteLocalRef
删除本地参考,而不是创建新的本地参考系。
I still can't understand why PopLocalFrame
needs a result parameter and a return value
假设您使用 PushLocalFrame
创建了一个新的本地参考框架,并且您想要删除在该框架上创建的所有本地参考 除了 您希望删除的一个参考喜欢保留(例如,你创建了一些你想从你的函数中 return 的对象)。
您通过将要保留的引用传递给 PopLocalFrame
来实现此目的,并且您返回的值是对先前本地引用帧(现在是当前引用帧)中该对象的引用。
问题一: 我有一个 java class 和静态方法:
class Test {
static public void show (String value) {
// dosomething with value
}
}
如果我想从 C++ 调用它:
jstring value = env->NewStringUTF("Hello, World");
// ExceptionCheck after NewStringUTF.
env->CallStaticVoidMethod(the_jclass, the_jmethodID, value);
// ExceptionCheck after CallStaticVoidMethod.
我应该把 PushLocalFrame 放在 NewStringUTF 之前,然后把 PopLocalFrame 放在 之后吗CallStaticVoidMethod 释放本地引用?
问题 2:
我看到 PopLocalFrame 的声明,它是:
jobject PopLocalFrame(JNIEnv *env, jobject result);
看了jni文档,还是不明白为什么PopLocalFrame需要一个结果参数和一个return值.能否举个例子说明它的存在价值?
Should I put
PushLocalFrame
beforeNewStringUTF
and putPopLocalFrame
afterCallStaticVoidMethod
to release local references?
在这种特殊情况下,我不明白这一点。您可以只使用 DeleteLocalRef
删除本地参考,而不是创建新的本地参考系。
I still can't understand why
PopLocalFrame
needs a result parameter and a return value
假设您使用 PushLocalFrame
创建了一个新的本地参考框架,并且您想要删除在该框架上创建的所有本地参考 除了 您希望删除的一个参考喜欢保留(例如,你创建了一些你想从你的函数中 return 的对象)。
您通过将要保留的引用传递给 PopLocalFrame
来实现此目的,并且您返回的值是对先前本地引用帧(现在是当前引用帧)中该对象的引用。