我正在使用 JNI 调用 API 编写一些代码。AC 程序启动一个 JVM 并调用它。JNIenv 指针对于 C 文件是全局的。我有许多 C 函数需要对给定的作业类执行相同的操作。所以我编写了辅助函数,它接受一个作业并处理它,返回所需的数据(C 数据类型......例如,一个 int 状态值)。编写 C 辅助函数并将作业对象作为参数传递给它们是否安全?
即(一个简单的例子 - 旨在说明问题):
int getStatusValue(jobject jStatus)
{
return (*jenv)->CallIntMethod(jenv,jStatus,statusMethod);
}
int function1()
{
int status;
jobject aObj = (*jenv)->NewObject
(jenv,
aDefinedClass,
aDefinedCtor);
jobject j = (*jenv)->CallObjectMethod
(jenv,
aObj,
aDefinedObjGetMethod)
status = getStatusValue(j);
(*jenv)->DeleteLocalRef(jenv,aObj);
(*jenv)->DeleteLocalRef(jenv,j);
return status;
}
谢谢。