¿Cómo acceder a matrices dentro de un objeto con JNI?

Tutoriales de JNI, por ejemploesta uno, cubre bastante bien cómo acceder a los campos primitivos dentro de un objeto, así como cómo acceder a matrices que se proporcionan como argumentos de función explícitos (es decir, como subclases dejarray). Pero cómo acceder a matrices Java (primitivas) que son camposdentro unjobject? Por ejemplo, me gustaría operar en la matriz de bytes del siguiente objeto Java:

class JavaClass {
  ...
  int i;
  byte[] a;
}

El programa principal podría ser algo como esto:

class Test {

  public static void main(String[] args) {
    JavaClass jc = new JavaClass();
    jc.a = new byte[100];
    ...
    process(jc);
  }

  public static native void process(JavaClass jc);
}

El lado correspondiente de C ++ sería entonces:

JNIEXPORT void JNICALL Java_Test_process(JNIEnv * env, jclass c, jobject jc) {

  jclass jcClass = env->GetObjectClass(jc);
  jfieldID iId = env->GetFieldID(jcClass, "i", "I");

  // This way we can get and set the "i" field. Let's double it:
  jint i = env->GetIntField(jc, iId);
  env->SetIntField(jc, iId, i * 2);

  // The jfieldID of the "a" field (byte array) can be got like this:
  jfieldID aId = env->GetFieldID(jcClass, "a", "[B");

  // But how do we operate on the array???
}

Estaba pensando en usarGetByteArrayElements, pero quiere unArrayType como su argumento. Obviamente me falta algo. ¿Hay una manera de hacer esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta