2013-01-02 40 views
0

我有那些两段代码,第一个是:在JNI使用jlong​​Array与Android NDK

JNIEXPORT jlongArray* JNICALL Java_com_home_overlay_activity_MainActivity_ProcessPointer(JNIEnv* env, jobject) { 

    jlongArray blobs_arr; 

    return &blobs_arr; 
} 

,第二个是:

JNIEXPORT jlongArray JNICALL Java_com_home_overlay_activity_MainActivity_Process(JNIEnv* env, jobject) { 

    jlongArray blobs_arr; 

    return blobs_arr; 
} 

我要的是回到多头排列,以java代码。

第一次运行好,而第二个不行,有什么问题在这里与恢复多头排列这种方式?

+0

工作? – njzk2

+0

我没有明白。它解决了我写在第一个答案 –

+0

注释的解决方案如果问题解决了,请写出溶液作为答案,并接受它。如果问题与问题无关,请关闭它。此外,第一个片段是非常,非常错误的 - 它不仅不会将数据返回到Java,这是错的C级,也因为它返回堆栈变量的地址。 –

回答

0

我的申请没有被阅读jni.h但工作..这是奇怪的,当我设置NDKROOT变量这一切正确是由JAVAH产生的其中一个

1

在Java中没有指针,所以我认为,如果第一个代码片段的实际工作,就不会产生你想要的所有东西。它可能会返回C jlong​​Array的内存地址。

至于第二段代码,除了它返回一个未初始化的对象,可能是NULL,可能是一些随机内存垃圾,这可能会导致Java端的意外行为,我看不到任何问题。也许你应该尝试在C部分,它初始化为NULL,或尝试使通过实际备案的数组,以便您可以测试在真实条件下的代码的行为您的代码段更加逼真。

+0

我的问题是不是编码,它的编译,该代码不会编译所有,反正我的应用程序不读jni.h但工作..这是奇怪的,当我设置NDKROOT变量这一切工作正常..但其他问题弹出,我可以在另一个线程张贴...谢谢 –