Re: [問題] 請教會C語言或JNI的版友
能否只做小幅度的修改
譬如說在.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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
AndroidDev 近期熱門文章
PTT數位生活區 即時熱門文章