2014-09-02 41 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

相關問題