比如,在C++中有个对象 中间有属性 和 集合,怎么样才能在java side 抓到 C++中分装好的对象呢? 例如: 
java 中想拿到 C++封装好的 
public class abc(){ 
  String a ; 
  Map(或者List等集合) map; 
} 看了一些资料都是传递简单的变量的,现在最大的问题是怎么传递如map,list等集合的,麻烦大家指点一下!!!!

解决方案 »

  1.   

    很少做过JNI方面的开发,只知道通过JNI可以调C/C++的函数。
      

  2.   

    jf 只要4分  thanks!
      

  3.   

    现在就困在map和list集合的jni实现上了,因为在jni传递map和list时java和c++之间的结构有冲突,不能赋值
      

  4.   

    显然不行,Java通过JNI调用C/C++,C、C++通过JNI提供的C接口访问Java对象。C++对象是一个缺乏标准的内存模型,很难通行。
      

  5.   

    可以通过在java和c++间传递简单的数据,再组装成复杂对象。
    这样的话倒不如全部在一方处理,通过传递简单的值,比如标志什么的来处理好
      

  6.   


    首先, 你需要传递的对象是什么,如果是JVM不知道的本地OS相关的对象,Java肯定无法支持。
    其次,如果你需要传递的是你自己定义的bean对象,完全可以做到
          获取JEVN对象,在你dll里面直接进入你要操作的bean对象,
         jclass cls = env->GetObjectClass(thing);
         把你c++的对象映射给这个Java对象就可以了。
    最后,eclipse早就把这种技术用得泛滥,居然还有人说做不到!
      

  7.   

    java 代码:
         public native Hashtable getNameList();
     
    c++ 代码:
    JNIEXPORT jobject JNICALL Java_ext_TestJNI_getNameList
      (JNIEnv *env, jobject jobj)
    {
        jclass class_Hashtable=env->FindClass("java/util/Hashtable");
    jmethodID construct_method=env->GetMethodID( class_Hashtable, "<init>","()V");
        jobject obj_Map =env->NewObject( class_Hashtable, construct_method, "");
     
    jmethodID add_method= env->GetMethodID(class_Hashtable,"put","(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");    env->CallObjectMethod(obj_Map,add_method,env->NewStringUTF((char*)"1"),env->NewStringUTF((char*)"person1"));  
        env->CallObjectMethod(obj_Map,add_method,env->NewStringUTF((char*)"2"),env->NewStringUTF((char*)"person2"));  
    return obj_Map;
    }
      

  8.   

    看了楼上得很受启发,现在是定义一个HashMap<string , Vrbean>;
    其中VrBean是自定义得类,class VrBean{
      String str;
      ArrayList<string> ary;
    };
    能够传递自定义得HashMap结构吗?
      

  9.   

    建个java类,完全封装对应的c++对象就好了。c++提供的函数,java也提供,只是java的函数实际是转调的c++动态库的。所有的c/c++库的java版都是这么做的吧。