Re: [問題] 請教會C語言或JNI的版友

看板AndroidDev作者 (QQ)時間13年前 (2011/07/27 22:51), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
能否只做小幅度的修改 譬如說在.java的主程式中宣告一個字元陣列 每當.C檔中接收到從sensor傳進來的字元陣列 直接將整個陣列回傳至.java中宣告的字元陣列中? ※ 引述《qrtt1 (null)》之銘言: : 看起來沒有必要傳 jstring : 你 sensor 傳來的也不是真的能顯示的字串啊 : 不如把參數改成 byte[] : 直接把 sensor 給 memcpy 進去,java 端就會拿到了。 : http://www.javaworld.com.tw/jute/post/view?bid=11&id=291118&sty=3 : 像例子內的 Mp3 Decoder 的 decode 函式: : public native int decode(byte[] buffer); : 把 byte[] 傳給底層,而寫了多少利用 return value 傳回 : /* : * Class: qty_player_Mp3Decoder : * Method: decode : * Signature: ([B)I : */ : JNIEXPORT jint JNICALL Java_qty_player_Mp3Decoder_decode : (JNIEnv *env, jobject self, jbyteArray buf) : { : // 讀得 buf 的大小,供 mpg123_read 使用 : jint len = (*env)->GetArrayLength(env, buf); : jbyte* cbuf = (*env)->GetByteArrayElements(env, buf, NULL); : // 取回 mpg123_handle* 指標位址 : jclass cls = (*env)->GetObjectClass(env, self); : jfieldID fid = (*env)->GetFieldID(env, cls, "handle", "I"); : jint handleId =(*env)->GetIntField(env, self, fid); : (*env)->DeleteLocalRef(env, cls); : // 呼叫 decode 函式,並寫入 buf 內。 : int decodedBytes = 0; : /* 改用你的 mempcy,注意參考 len 不要超出邊界 */ : int err = mpg123_read((mpg123_handle*) handleId, cbuf, len, &decodedBytes); : (*env)->ReleaseByteArrayElements(env, buf, cbuf, 0); : // 回傳本次 decode 資料的長度 : if(err == MPG123_OK) : return decodedBytes; : return -1; // 仿一邊的檔案讀寫,-1 代表結束 。 : } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.39.56.98
文章代碼(AID): #1EC2NP6h (AndroidDev)
文章代碼(AID): #1EC2NP6h (AndroidDev)