在ndk的例子中,看到的都是java类的某个方法为native method,对应c中的一个函数。现在我想把c++写的类供java使用,于是定义一个相应的java类,但是我怎样将这个java对象和c++对象关联起来呢?用代码示意如下:
java:
public class HelloJni 
{
    public native String  stringFromJNI();
}c++:
class HelloJni_C
{
    string m_string;
    string GetString() { return m_string; };
}c:
jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
{
    HelloJni_C* p = null;
    p = ...; // 想办法得到 thiz 对象对应的 HelloJni_C对象    return (*env)->NewStringUTF(env, p->GetString());
}
我是想把HelloJni类当做java版的HelloJni_C类来使用,每个java对象都对应创建一个c++对象并把他们关联起来,在每个native方法中找到对应的c++对象调用其方法。
请问这个思路可行吗,怎么实现?我是新手,原本只会windows和c++,java和Android都是新学,望高手不吝指教。

解决方案 »

  1.   

    没有人回复啊。我查了一下资料,有这么一个思路:
    每个java对象都有一个ID,就是c函数参数中的“jobject thiz ”,对应每个"thiz",创建一个c++对象,用一个表把thiz和c++指针对应起来,这样通过查表就可以从java对象对应到c++对象。通过java对象构造和析构时调用对应的c++方法,该c++对象可以和java对象同步创建和销毁。