如何在JNI中处理类似结构的jobject

时间:2018-04-15 20:56:28

标签: java c java-native-interface

我有一个使用Java Native Interface的问题。我有以下课程:

public class TestJNI {
  public static native long sendCommand(int id, MyParms param);

  static {
    System.loadLibrary("TestNative");
  }
}

MyParams看起来像这样:

public class MyParams {
  public String lpstrElementName;
}

然后我有一个C档:

#include <jni.h>
#include "TestJNI.h"

JNIEXPORT jlong JNICALL Java_TestJNI_sendCommand
  (JNIEnv *env, jclass clazz, jint id, jobject param)
{
  // code
}

此时我不知道如何处理jobject参数以及如何访问我的元素名称属性?

1 个答案:

答案 0 :(得分:1)

这是访问整数类字段的简短示例,有关更多信息,请使用已发布的链接Jorn Vernee

class MyParms
{
  int myVar;
}

读取 myVar 的值的函数:

JNIEXPORT jlong JNICALL Java_TestJNI_sendCommand
  (JNIEnv *env, jclass clazz, jint id, jobject param)
{
  jfieldID jfid;
  jclass jclass;
  jint val;

  jclass = (*env)->GetObjectClass( env, param );
  jfid   = (*env)->GetFieldID( env, jclass, "myVar", "I");
  val    = (*env)->GetIntField( env, param, jfid );
}

编辑:用于访问字符串字段...

env->GetFieldID( clazz, "myVar", "Ljava/lang/String;" );

有关详细信息,请参阅herehere