2 回答

TA貢獻1909條經驗 獲得超7個贊
使用sizeof(bytes)是錯誤的。這為您提供了char*指針本身的字節大?。?2 位中 4 個,64 位中 8 個),而不是所指向數據的字節大小。
您需要更改func()以傳入char數組中s的數量。然后,您可以在分配和填充 JNI 數組時使用該數字。
此外,您需要在CallNonvirtualVoidMethod()退出后釋放 JNI 數組。
試試這個:
void func(char* bytes, int numBytes)
{
jclass callbackClass = fJNIEnv->GetObjectClass(fJObject);
jmethodID javaFunc = fJNIEnv->GetMethodID(callbackClass, "javaFunc", "([B)V");
jbyteArray array = fJNIEnv->NewByteArray(numBytes);
fJNIEnv->SetByteArrayRegion(array, 0, numBytes, (jbyte *) bytes);
fJNIEnv->CallNonvirtualVoidMethod(fJObject, callbackClass, javaFunc, array);
fJNIEnv->DeleteLocalRef(array);
}
或者,傳入一個更合適的 C++ 容器,例如std::vector<char>:
void func(const std::vector<char> &bytes)
{
jclass callbackClass = fJNIEnv->GetObjectClass(fJObject);
jmethodID javaFunc = fJNIEnv->GetMethodID(callbackClass, "javaFunc", "([B)V");
jbyteArray array = fJNIEnv->NewByteArray(bytes.size());
fJNIEnv->SetByteArrayRegion(array, 0, bytes.size(), (jbyte *) bytes.data());
fJNIEnv->CallNonvirtualVoidMethod(fJObject, callbackClass, javaFunc, array);
fJNIEnv->DeleteLocalRef(array);
}
添加回答
舉報