【问题标题】:JNI. How to get jstring from jobject and convert it to char*JNI。如何从 jobject 获取 jstring 并将其转换为 char*
【发布时间】:2013-12-10 17:29:35
【问题描述】:

这是我目前所拥有的: 我传递一个具有 2 个字段的对象:字符串和整数,作为参数 我想发送信息以在 C 部分处理它,这在这一点上并不重要...... 我在 jstring 声明中受到抱怨

JNIEXPORT jint JNICALL Java_Tier3_NativeMethods_totalPalletsIn(
            JNIEnv *env, jclass cls, jobject stat) {

jclass staticsitcs = (*env)->GetObjectClass(env, stat);

// Here I try to get it using the ID
jfieldID idDate = (*env)->GetFieldID(env, staticsitcs, "date", "S");

jstring dateString = (jstring)(*env)->GetStringRegion(env, stat, idDate);

// Here converting whatever I get in jstring to char*
char* date = (*env)->GetStringUTFChars(env,dateString,0);

// Getting the 2nd field from the object
jfieldID idNumber = (*env)->GetFieldID(env, staticsitcs, "amount", "I");

jint amount = (*env)->GetDoubleField(env, stat, idNumber);

// Calling C method
jint totalPallets = checkTotalPalletsIn(date, amount);

(*env)->ReleaseStringUTFChars(env, dateString, date);

return totalPallets;
}

我错过了什么?

【问题讨论】:

    标签: java c java-native-interface char-pointer


    【解决方案1】:

    jstring dateString = (jstring)(*env)->GetObjectField(env, stat, idDate);

    ... 之后一切正常。

    【讨论】:

    • 比帮助了,但现在当我尝试将日期传递给 C 方法时,我得到“初始化丢弃指针目标类型的 «const» 限定符”。有什么建议吗?
    • 你有没有将 date 声明为 const char *
    • 不,只是字符*。好吧..我发现这只是一个警告,所以没什么大不了的,但是现在当我编译它时,我看到了:/cygdrive/c/Temp/ccLeMJG9.s:汇编程序消息:/cygdrive/c/Temp/ccLeMJG9。 s:15: 错误:push' /cygdrive/c/Temp/ccLeMJG9.s:25: Error: operand type mismatch for call' 的指令后缀无效 ....
    • 好的,现在已经修复了。使用 64 位编译器而不是 32
    • @AlexCohn 你能告诉我如何从 Jclass 对象中提取类名吗?
    猜你喜欢
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多