Как рассчитать входной массив int в C в NDK - PullRequest
0 голосов
/ 07 июня 2019

Я изучаю использование C в Android App через NDK. В моей первой попытке я хотел бы передать массив Java в качестве аргумента в функцию C. Компиляция проекта, у меня нет проблем с компиляцией.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        Sample s=new Sample();
        int[] b={1, 2, 3};
        int a=s.sum(b);
        Log.i("aa","sum= "+a);

    }


public class Sample {

    static {
        System.loadLibrary("sample");
        Log.i("a", "Load sample");
    }

    public native int somma(int[] b);
}
#include <jni.h>
#include "sample.h"  // Generated

JNIEXPORT jint JNICALL
Java_com_example_myapplication_Sample_somma(JNIEnv *env, jobject instance, jintArray b_) {
    jint *b = (*env)->GetIntArrayElements(env, b_, NULL);

    size_t n = sizeof(b_) / sizeof(jint);
    jint result=0;

    for (int i=0;i<n;i++) {
        result+=(*b);
        b++;
    }

    (*env)->ReleaseIntArrayElements(env, b_, b, 0);

    return result;

}

Проблема в инструкции size_t n = sizeof(b_) / sizeof(jint);. Как определить количество элементов массива b _?

Заранее спасибо.

1 Ответ

1 голос
/ 07 июня 2019

Вы можете получить длину вашего массива с помощью GetArrayLength:

jsize arrayLength = (*env)->GetArrayLength(env, b_);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...