簡體   English   中英

jboolean* 和 uint64_t* 之間的轉換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM