0

私はこれらの2つのコードを持っています。最初は次のとおりです。

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

    jlongArray blobs_arr;

    return &blobs_arr;
}

そして2番目は:

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

    jlongArray blobs_arr;

    return blobs_arr;
}

私が欲しいのは、長い配列をJavaコードに返すことだけです。

最初は正常に実行されますが、2番目は正常に実行されません。この方法で長い配列を返すことに問題はありますか?

4

2 に答える 2

1

Javaにはポインタがないので、コードの最初のスニペットが実際に機能する場合、それはあなたが望むものをまったく生成しないと思います。おそらくCjlong​​Arrayのメモリアドレスを返します。

2番目のコードについては、初期化されていないオブジェクト、おそらくNULL、ランダムなメモリガベージを返すことを除いて、問題は見られません。これにより、Java側で予期しない動作が発生する可能性があります。たぶん、C部分でNULLに初期化するか、実際に配列をファイリングしてコードスニペットをより現実的にして、実際の条件でコードの動作をテストできるようにする必要があります。

于 2013-01-02T10:52:00.233 に答える
0

私のアプリケーションはjni.hを読み取っていませんでしたが、動作していました。これは奇妙なことです。NDKROOT変数を設定した後、すべて正しく動作しました。

于 2013-01-02T13:55:01.337 に答える