2012-04-03 7 views
1

? 私は、ヘッダファイルを生成していると私は得た:JNI複数の変数

#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

(http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+0

あなたのJavaメソッドとJNIメソッドのシグネチャが一致しません。 (int []とjfloatArray)。 javahを使用して署名を生成します。それは痛みの多くを節約します。 – jogabonito

答えて

0
  • .cファイルは、同じヘッダーと一致するようにbody {}とパラメーター名で記述します。
  • 変数
  • リターンで結果

コード何かをする:

#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