如何在JNI中将Java Long Object传递给C

时间:2018-07-30 07:22:53

标签: java android c java-native-interface

这适用于Java字符串:

public native Entity[] getALLEntityTYPES(String entityType);  

extern "C"
JNIEXPORT jobjectArray JNICALL
Java_my_jni_project_getALLEntityTYPE(JNIEnv *env, jobject instance, jstring entityType_) {

    const char *entityType = env->GetStringUTFChars(entityType_, 0);

如何将Java Long Object传递给JNI中的C:

public native String getEntityTypeByEntityGUID(Long entityGUID);

提前谢谢大家。

3 个答案:

答案 0 :(得分:1)

如果您可以传递长整型而不是长整型,请在此处查看传递原始类型的完整示例

http://jnicookbook.owsiak.org/recipe-No-011/

如果您想传递Long(作为对象),请在这里看看

http://jnicookbook.owsiak.org/recipe-No-020/

其中显示了从Object获取值的示例代码。当然,根据您的情况,您需要访问Long类的字段。

答案 1 :(得分:0)

如果只需要将long值传递给jni,则可以使用int64_t。不要忘记包含stdint.h来使这种类型可用。 Java本机签名将需要使用long(而不是Long对象)

答案 2 :(得分:0)

最简单的解决方案可能是使用long值而不是Long对象:

public native String getEntityTypeByEntityGUID(long entityGUID);

并使用jlong类型声明您的本机函数(参见docs):

extern "C"
JNIEXPORT jobjectArray JNICALL
Java_my_jni_project_getEntityTypeByEntityGUID(jlong entityGUID) {
    // (...)