Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JNIからCの関数コール(しかもパラメータ入出力)

こんにちは。

JNIにて、Cのメソッドをコールして、パラメータでデータをもらおうとしてますが、可能なのでしょうか?

Cメソッド
int getParameter(void* data, int size){

int i;
uchar *a = (uchar *)data;

// 配列のデータに1をプラスして返す。
for( i = 0;i<size; i++){
    *(a++) += 1;
}
}

Java側

byte[] values = new byte[100];

getParameter(values, values.length); 

4

回答

4832

閲覧

4件の回答

評価

0

まずはjniの基本を、サンプルを使って勉強してください。

評価

0

>mioさん

 やはりご存知ないんですね。意外と資料がないですからね〜。

評価

0

何をもって知らないと思ったのか分かりませんが…。

言いたかったのは、Cのメソッド(ふつうは「関数」と言いますが)は、まずJDKが用意しているツールを使って、宣言を作ってもらうという、jniの基本の部分です。

サンプルなぞ、検索すればいくらでも出てくると思いますが。

評価

0

とりあえず、実処理の根本的なところにも触れておきます。

Javaの配列は、メモリ上の連続空間であるCの配列とは異なり、クラス(オブジェクト)です。
jniでJavaの配列内の要素にアクセスするには、前述のツールを利用して作成した関数の第一引数JNIEnvにある専用のメソッドを用います。

私ならパラメータの個数だけ渡して、jni内部で配列をnew(これもJNIEnvのメソッドを利用)して、戻り値としてJavaに返すと思いますが。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。