2012-01-18 8 views
0

ネイティブコード(C++)からJava頂点配列(浮動小数点配列)へのアクセスを取得する必要がありますが、どのようにそのドキュメントを見つけることができません..オブジェクトにアクセスできます配列変数にはアクセスできません。アンドロイドのsdkアクセスネイティブコードからの浮動小数点配列

非配列変数にアクセスするコード:私はmesh_objから頂点[]にアクセスするにはどうすればよい

// 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; 
    ... 
} 

を?

答えて

1

numVertexフィールドの場合と同じように行います。 intの代わりに、あなたは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 
} 
関連する問題