JNI - 可以将复杂类型作为本机方法参数传递吗?

时间:2013-11-24 09:13:53

标签: java c++ java-native-interface

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

我的问题是关于复杂类型,例如java对象,可以将它作为本机方法参数传递吗?以及如何在c ++方面使用它?

1 个答案:

答案 0 :(得分:3)

当然可以访问对象。 JNI spec在章节

中很好地描述了这些原则
  • 引用Java对象
  • 访问字段和方法

基本摘录如下:

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

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

如果您有字段ID,则可以使用SetIntField等方法设置字段的值,或使用SetIntFieldGetIntField检索字段。

这只是一个粗略的概述。