JNI несколько переменных - PullRequest
       1

JNI несколько переменных

1 голос
/ 03 апреля 2012

Я использую JNI, передавая многие переменные из Java в C

public native int[] intArrayMethod(int[] t,int nbr,int tag);

Как я могу использовать эти переменные в C?Я сгенерировал заголовочный файл и получил:

#ifndef _Included_MainClass
#define _Included_MainClass

#ifdef __cplusplus
extern "C" 
{
#endif

/*
 Class:     MainClass
 Method:    intArrayMethod
 Signature: ([FII)[I
*/

    JNIEXPORT jintArray JNICALL Java_MainClass_intArrayMethod
        (JNIEnv *, jobject, jfloatArray, jint, jint);

#ifdef __cplusplus
}
#endif

#endif

Как использовать переменные, переданные в моем C-коде?

1 Ответ

0 голосов
/ 03 апреля 2012
  • Записать соответствующий файл .c - тот же заголовок, но с телом {} и именами параметров.
  • сделать что-то с переменными
  • , вернуть результат

Код:

#include "foo.h"
JNIEXPORT jintArray JNICALL Java_MainClass_intArrayMethod 
(JNIEnv * env, jobject obj, jfloatArray arr, jint a, jint b) {

     jintArray ret[2];
     ret[0] = a + b;
     ret[1] = arr[0] + arr[1];
     return ret;
}

Скомпилируйте его примерно так:

gcc -shared foo.c -I/path/to/java/include -o libfoo.so

Не забудьте включить в код Java строку загрузки:

static {
   System.loadLibrary("foo"); // does not include lib prefix, or .dll/.so suffix!
}

Запустите с этим (при условии libfoo.so в текущем каталоге).

java -Djava.library.path=. Foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...