2012-01-18 5 views
0

Мне нужно получить доступ из собственного кода (C++) в массив вершин java (массив float), но я не могу найти документацию, как это сделать .. Я могу получить доступ к объекту и его переменные без массива, но не знают, как получить доступ к массиву.android sdk access java float array из собственного кода

Код доступа к нон переменной массива:

// get mesh object 
jclass clazz = env->GetObjectClass(java_obj); 
jfieldID mesh_fid = env->GetFieldID(clazz, field_name, "Lorg/siprop/bullet/util/Mesh;"); 
jobject mesh_obj = env->GetObjectField(java_obj, mesh_fid); 

// get mesh vert count 
jclass mesh_clazz = env->GetObjectClass(mesh_obj); 
jfieldID mesh_vertCoun_fid = env->GetFieldID(mesh_clazz, "numVertex", "I"); 
int vertCount = env->GetIntField(java_obj, mesh_vertCoun_fid); 

// java code 
class Mesh 
{ 
    public float vertex[]; 
    public int numVertex = 0; 
    ... 
} 

Как я могу получить доступ вершины [] из mesh_obj?

ответ

1

Вы делаете это аналогично, как вы делаете это для поля numVertex. Вместо ИНТ вы получите jarray:

jfieldID mesh_vertex_fid = env->GetFieldID(mesh_clazz, "vertex", "[F"); 
jfloatArray vertices = (jfloatArray)env->GetObjectField(java_obj, mesh_vertex_fid); 

После того, что вы можете получить доступ к элементам массива либо с GetFloatArrayElements или GetPrimitiveArrayCritical методами:

float* verticesPtr = env->GetFloatArrayElements(vertices, NULL); 
if (verticesPtr) 
{ 
    // process vertices here 
    // ... 

    env->ReleaseFloatArrayElements(vertices, verticesPtr, JNI_ABORT); // discard changes, change to JNI_COMMIT to save changes 
} 
Смежные вопросы