在java中我有:
package com.mypkg.utils;
...
public class attitude_calculator
{
private long native_ptr_;
...
public native RealMatrix R();
}
在jni层中,我需要访问native_ptr_
。以下是我尝试这样做的方法:
JNIEXPORT jobject JNICALL
Java_com_mypkg_utils_attitude_1calculator_R(JNIEnv *jenv,
jobject jobj)
{
myns::AttitudeCalculator *nobj = nullptr;
jlong addr = 0;
jfieldID jfid = 0;
jclass jcls;
jcls = jenv->GetObjectClass(jobj);
jfid = jenv->GetFieldID(jcls, "native_ptr_",
"Lcom/mypkg/utils/attitude_calculator$native_ptr_;");
if (jfid == nullptr || jfid == NULL) {
...
}
...
}
调用GetFieldID
会产生
java.lang.NoSuchFieldError的。
拨打GetFieldID
的正确方法是什么?
答案 0 :(得分:1)
native_ptr_
是long
,因此其签名为"J"
,不 "Lcom/mypkg/utils/attitude_calculator$native_ptr_;"
。
所以电话应该是:
jfid = jenv->GetFieldID(jcls, "native_ptr_", "J");