2014-09-02 77 views
1

当从活动方法调用本机C/C++方法时,该方法的第二个参数表示什么?例如,考虑一个在test.cpp中定义的简单程序:代表本地方法jobject参数的是什么?

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

(为了简单起见,我省略了真正的方法名称)。在活动课,我可以宣布,如本地方法:

native static void test(); 

如果我从活动的onCreate()方法调用它,并obj参数“代表”的活动?

回答

2

如果方法是静态的,则obj表示Object引用或Class引用。例如:

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 2014-09-03 07:10:33

+0

@EJP,当然。这是第二个参数。投射可以工作:jclass cls =(jclass)obj; – yushulx 2014-09-03 07:21:48

相关问题