jni 獲取變量

#define JINT "I"
#define JLONG "J"
#define JFLOAT "F"
#define JSTR "Ljava/lang/String;"
#define JBOOL "Z"
#define JBYTES "[B"
///獲取變量ID
jfieldID GetFieldID_(int line,
                     JNIEnv* jni,
                     jclass c,
                     const char* name,
                     const char* signature);
///獲取變量ID
jfieldID GetFieldID_(int line,
                     JNIEnv* jni,
                     jclass c,
                     const char* name,
                     const char* signature) {
  jfieldID f = jni->GetFieldID(c, name, signature);
  CHECK_EXCEPTION(jni) << "error during GetFieldID"
                       << " line: " << line;
  CHECK(f) << name << ", " << signature << " line: " << line;
  return f;
}

///獲取變量ID
#define _GetFieldID(_jni_, _c_, _name_, _signature_) \
  GetFieldID_(__LINE__, _jni_, _c_, _name_, _signature_)


///獲取整型變量
jint GetIntField_(int line,
                  JNIEnv* jni,
                  jobject object,
                  jclass cls,
                  const char* name);
///獲取整型變量
jint GetIntField_(int line,
                  JNIEnv* jni,
                  jobject object,
                  jclass cls,
                  const char* name) {
 // 重要的是這一句, 其他類型的調(diào)用其他的名稱,如:GetLongField....
  jint i = jni->GetIntField(object, _GetFieldID(jni, cls, name, JINT));
  CHECK_EXCEPTION(jni) << "error during GetIntField"
                       << " line: " << line;
  return i;
}

#define _GetIntField(_jni_, _obj_, _cls_, _name_) \
  GetIntField_(__LINE__, _jni_, _obj_, _cls_, _name_)
  • 使用方式
    獲取一個對象的整形變量
jint sn  = _GetIntField(env, msg, cls, "sn");
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容