2014-09-02 3 views
1

Когда из метода активности вызывается собственный метод C/C++, что представляет собой второй параметр метода? В качестве примера, рассмотрим простой процедурой, определенной в, например, test.cpp:Что представляет собой параметр задания нативного метода?

void test(JNIEnv *env, jobject obj) 
{ 
} 

(я опустили истинное имя метода для простоты). В классе деятельности, я мог бы объявить нативный метод, как:

native static void test(); 

Если я называю его от метода OnCreate() деятельности, имеет ли параметр OBJ «представляет» деятельности?

ответ

2

obj представляет ссылку на объект или ссылку на класс, если метод является статическим. Например:

public class HelloJNI { 
    static { 
     System.loadLibrary("hellojni"); 
    } 

    public native String test(); 
    public native static void staticTest(); 
} 

public class JNITest extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     HelloJNI.staticTest() // jobject obj = HelloJNI.class 
     HelloJNI hellojni = new HelloJNI(); 
     hellojni.test(); // jobject obj = hellojni 
    } 
} 
+1

Если метод является статическим, у вас вообще нет параметра 'jobect', у вас есть параметр jclass. – EJP

+0

@EJP, конечно. Это второй аргумент. Кастинг может работать: jclass cls = (jclass) obj; – yushulx

Смежные вопросы