java - JNI——可以将复杂类型作为 native 方法参数传递吗?

标签 java c++ java-native-interface

我见过的大多数使用 JNI 的示例都将主要类型的参数传递给可以根据 this 轻松映射的本地方法。

我的问题是关于复杂类型的,例如 java 对象是否可以将其作为 native 方法参数传递?以及如何在 C++ 端使用它?

最佳答案

当然可以访问对象。 JNI spec在章节中很好地描述了原理

  • 引用 Java 对象
  • 访问字段和方法

基本摘录是这样的:

JNI 不会为您的类提供 C++ 对应物。 每个 对象类型都作为不透明的jobject(或“jstring”或“jarray”等)传递给C 代码。

JNI 为您提供实用程序,可以从这些 jobject 中提取其他元信息,例如字段和方法的 ID。 GetIntField 是其中一种实用方法。

当您有字段 ID 时,您可以使用 SetIntField 等方法来设置字段的值或使用 SetIntFieldGetIntField 检索它>.

这当然只是一个粗略的轮廓。

关于java - JNI——可以将复杂类型作为 native 方法参数传递吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20172895/

相关文章:

java - 如何在spring mvc中将用户表单数据发送到服务器

c++ - 我们可以根据条件语句创建类的对象吗?

c++ - 设置 3d 空间中对象的方向

Android,对于 JNI,是否应该在 InputMethodService 中调用 System.loadLibrary?

java - 找到将输入和输出匹配在一起的数学算法

java - 为什么 MySQL 会提示此查询中的未知列?

链表的C++继承

Java native 接口(interface)和安全性

java - Android 中的 AboutToQuit 信号/事件

java - 如何知道图像文件的类型