У меня есть метод, реализованный на языке C, который с использованием JNI должен возвращать результат типа byte[][].

Мой код выглядит так:

jobjectArray result = java_env->NewObjectArray(num_byte_arrays, jbyteArray, NULL);
for (int i = 0 ; i < num_byte_arrays ; i++) {
    java_env->SetObjectArrayElement(result, i, java_env->NewByteArray(3));
}

Я получаю следующую ошибку компиляции:

error: expected primary-expression before ',' token
   jobjectArray result = java_env->NewObjectArray(num_patches, jbyteArray, NULL);
                                                                         ^

Я предполагаю, что мой второй параметр для NewObjectArray, то есть jbyteArray, неверен для создания массива byte[][].

Есть идеи, как мне указать, что тип массива объектов - byte[]?

0
SomethingSomething 16 Янв 2018 в 14:38

1 ответ

Лучший ответ

Решил это следующим образом (своего рода обходной путь):

jobjectArray result = NULL;
for (int i = 0 ; i < num_byte_arrays ; i++) {
    jbyteArray byte_array = java_env->NewByteArray(3);
    if (i == 0) {
        result = java_env->NewObjectArray(num_byte_arrays, java_env->GetObjectClass(byte_array), NULL);
    }
    java_env->SetObjectArrayElement(result, i, byte_array);
}

Что я сделал, так это то, что я создал массив объектов только тогда, когда первый объект byte[] уже был готов. Запустив метод JNI GetObjectClass для первого объекта byte[], я мог указать для NewObjectArray нужный параметр jobject.

Не уверен, каким другим способом можно получить предмет jobject, представляющий byte[].

0
SomethingSomething 12 Мар 2018 в 09:48