比如,在C++中有个对象 中间有属性 和 集合,怎么样才能在java side 抓到 C++中分装好的对象呢? 例如:
java 中想拿到 C++封装好的
public class abc(){
String a ;
Map(或者List等集合) map;
} 看了一些资料都是传递简单的变量的,现在最大的问题是怎么传递如map,list等集合的,麻烦大家指点一下!!!!
java 中想拿到 C++封装好的
public class abc(){
String a ;
Map(或者List等集合) map;
} 看了一些资料都是传递简单的变量的,现在最大的问题是怎么传递如map,list等集合的,麻烦大家指点一下!!!!
这样的话倒不如全部在一方处理,通过传递简单的值,比如标志什么的来处理好
首先, 你需要传递的对象是什么,如果是JVM不知道的本地OS相关的对象,Java肯定无法支持。
其次,如果你需要传递的是你自己定义的bean对象,完全可以做到
获取JEVN对象,在你dll里面直接进入你要操作的bean对象,
jclass cls = env->GetObjectClass(thing);
把你c++的对象映射给这个Java对象就可以了。
最后,eclipse早就把这种技术用得泛滥,居然还有人说做不到!
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;
}
其中VrBean是自定义得类,class VrBean{
String str;
ArrayList<string> ary;
};
能够传递自定义得HashMap结构吗?