gpt4 book ai didi

java - 在 JNI 调用 API 中工作时可以安全地将对象传递给 C 函数吗?

转载 作者:太空宇宙 更新时间:2023-11-04 00:10:15 26 4
gpt4 key购买 nike

我正在使用 JNI 调用 API 编写一些代码。 C 程序启动 JVM 并调用它。 JNIenv 指针对于 C 文件是全局的。我有许多 C 函数需要对给定的 jobject 类执行相同的操作。所以我编写了辅助函数,它接受一个 jobject 并对其进行处理,返回所需的数据(C 数据类型......例如,一个 int 状态值)。编写 C 辅助函数并将 jobject 作为参数传递给它们是否安全?

即(一个简单的例子 - 旨在说明问题):

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;

}

谢谢。

最佳答案

我不熟悉 JNI 的细节,但有一次我注意到的是:

return (*jenv)->CallIntMethod(jenv,jStatus,statusMethod);

这看起来像官方的 JNI 代码,它以 jobect 作为参数。如果它适用于 JNI,则没有理由不能适用于您的代码。

关于java - 在 JNI 调用 API 中工作时可以安全地将对象传递给 C 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2735073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com