我见过的大多数使用 JNI 的示例都将主要类型的参数传递给可以根据 this 轻松映射的本地方法。
我的问题是关于复杂类型的,例如 java 对象是否可以将其作为 native 方法参数传递?以及如何在 C++ 端使用它?
最佳答案
当然可以访问对象。 JNI spec在章节中很好地描述了原理
- 引用 Java 对象
- 访问字段和方法
基本摘录是这样的:
JNI 不会为您的类提供 C++ 对应物。 每个 对象类型都作为不透明的jobject
(或“jstring”或“jarray”等)传递给C 代码。
JNI 为您提供实用程序,可以从这些 jobject
中提取其他元信息,例如字段和方法的 ID。 GetIntField
是其中一种实用方法。
当您有字段 ID 时,您可以使用 SetIntField
等方法来设置字段的值或使用 SetIntField
或 GetIntField
检索它>.
这当然只是一个粗略的轮廓。
关于java - JNI——可以将复杂类型作为 native 方法参数传递吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20172895/