[英]Conversion between jboolean* and uint64_t*
我正在嘗試將具有 128 個元素(始終)的jbooleanArray
轉換為也具有 128 個元素的bool
的 C++ 數組。
extern "C" {
JNIEXPORT jboolean Java_com_app_flutter_1app_JNI_loadBufferNative(
JNIEnv *env, jbooleanArray jMidiNotes) {
bool midiNotes[128] = {false};
*reinterpret_cast<uint64_t*>(midiNotes) = *env->GetBooleanArrayElements(jMidiNotes, nullptr);
*reinterpret_cast<uint64_t*>(midiNotes + 64) = *env->GetBooleanArrayElements(jMidiNotes + 64, nullptr);
我相信GetBooleanArrayElements
返回jboolean*
,看起來jboolean
是 C++ 中的uint8_t
(奇怪)。
我在這里做錯了什么? 我收到崩潰JNI DETECTED ERROR IN APPLICATION: use of invalid jobject 0x7ff426b390
。
由於jboolean = uint8_t
我也試過
*reinterpret_cast<uint64_t*>(midiNotes + 64) = *env->GetBooleanArrayElements(jMidiNotes + 8, nullptr);
但我遇到了同樣的崩潰
您不能像這樣對 object 句柄進行指針運算:
*reinterpret_cast<uint64_t*>(midiNotes + 64) = *env->GetBooleanArrayElements(jMidiNotes + 64, nullptr);
您應該首先使用GetBooleanArrayElements
獲取指向數組元素的指針,然后對該指針進行指針運算。 例如,這樣做:
extern "C" {
JNIEXPORT jboolean Java_com_app_flutter_1app_JNI_loadBufferNative(
JNIEnv *env, jbooleanArray jMidiNotes) {
bool midiNotes[128] = {false};
jboolean* values = env->GetBooleanArrayElements(jMidiNotes, nullptr);
std::copy(values, values + 128, midiNotes);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.