###前提・実現したいこと
はじめまして、モモコといいます。
最近、JNIをはじめたところなのですが
環境は、Eclipseを使った JNI のビルド環境はできています。
目的は、Cで書かれたソースをSHARED_LIBRARY化して
android(Java)から呼び出したいです。
既に、C側のソースがあるのですがそれには手を加えず行いたいです。
はじめたばかりで分からないことばかりの為、
ご指摘、ご教授願えればと思います。
よろしくお願いします。
###ソースコード
C
1-------------- 2testMakeData.c 3-------------- 4/* 5* @param [in] output_file_name 出力パス名 6* @param [in] id データ取得したいid 7* @param [out] data データ 8* @param [out] dataName データ名 9*/ 10int MakeData( 11 char output_file_name[256], 12 int id, 13 unsigned char *data 14 char *dataName 15 ) 16 17この用なメソッドの場合、 18どの様にすれば良いのかわかりません。
c
1途中まで考えたのは 2testMakeData.cをラッピングするインターフェイスを作り 3Javaからはそこを呼び出す。 4----------------- 5makedata_jni_if.c 6----------------- 7#include testMakeData.c 8 9jint Java_com_example_testProject_TestApp_MakeDataJNI( 10 JNIEnv* env, 11 jobject thiz, 12 jint id, 13 jstring outputFileName, 14 jcharArray data ← これであっているのか正しい書き方が分かりません 15 jcharArray dataName ← これであっているのか正しい書き方が分かりません 16 ) 17{ 18 19 jint ret = 0; 20 const char *pOutputFileName = 21 (*env)->GetStringUTFChars( env, outputFileName, NULL ); 22 char *pData = 23 (jchar *)((*env)->GetCharArrayElements( env, data, NULL)); 24 char *pDataName = 25 (jchar *)((*env)->GetCharArrayElements( env, dataName, NULL)); 26 27 // *pData, *pDataNameも、多分このままでは行けないと思うのですが 28 // この後、どの様に扱えば良いのか分かりません 29 30 // MakeDataを呼び出す 31 ret = MakeData( 32 id, 33 pOutputFileName, 34 pData, 35 pDataName 36 37 ) 38 39 // 解放 40 (*env)->ReleaseStringUTFChars( env, outputFileName, pOutputFileName ); 41 (*env)->ReleaseCharArrayElements( env, data, pData ); 42 (*env)->ReleaseCharArrayElements( env, dataName, pDataName ); 43 44 return ret; 45 46}
Java
1String filePath "/temp/"; 2char data[] = new char[20000]; 3char dataName[] = new char[100]; 4int id = 12; 5 6int ret = MakeData(filepath, id, data, dataName); 7if(rest == RET_OK){ 8 // C側から戻ってきたデータ名 9 String str = String.valueOf(dataName); 10 // C側から戻ってきたデータ 11 ・・・・・・ 12 ・・・・・ 13} 14 15public native static int MakeDataJNI( 16 String output_file_name, 17 int id, 18 char[] data, 19 char[] dataName, 20 21 ); 22 static { 23 System.loadLibrary( "MakeData" ); 24 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/20 04:20