将向量转换为C ++ / JNI中的jobject? [英] convert vector to jobject in C++/JNI?
本文介绍了将向量转换为C ++ / JNI中的jobject?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是Java原生函数 -
public native ArrayList< String> parseXML();
在C ++中我的原生函数 -
vector< string> resultList;
JNIEXPORT jobJNICALL Java_Sample1_parseXML
(JNIEnv * env,jobject obj){
// logic
return resultList; //这里得到错误
}
我的问题是如何转换resultList )to jobject type?
解决方案
您必须在C ++中为ArrayList创建一个包装器。例如:
矢量< char *> vec;
jclass clazz =(* env).FindClass(java / util / ArrayList);
jobject obj =(* env).NewObject(clazz,(* env).GetMethodID(clazz,< init>,()V));
for(int n = 0; n< vec.size(); n ++)
{
char * str =(char *)static_cast< char *> [n]);
jstring _str =(* env).NewStringUTF(str);
(* env).CallVoidMethod(object,(* env).GetMethodID(clazz,add,(java / lang / Object)V),_str);
}
return obj;有关详细信息,请参阅
a href =http://download.oracle.com/javase/1.4.2/docs/guide/jni/spec/functions.html> http://download.oracle.com/javase/1.4.2/docs /guide/jni/spec/functions.html
I am using Java native function -
public native ArrayList<String> parseXML();
In C++ my native function -
vector<string> resultList;
JNIEXPORT jobject JNICALL Java_Sample1_parseXML
(JNIEnv *env, jobject obj){
// logic
return resultList; // here getting error
}
My problem is that how to convert resultList (vector type) to jobject type?
解决方案
You would have to create a wrapper for the ArrayList in C++. Something like:
vector <char*> vec;
jclass clazz = (*env).FindClass("java/util/ArrayList");
jobject obj = (*env).NewObject(clazz, (*env).GetMethodID(clazz, "<init>", "()V"));
for (int n=0;n<vec.size();n++)
{
char* str = (char*) static_cast<char*>(vec[n]);
jstring _str = (*env).NewStringUTF(str);
(*env).CallVoidMethod(object, (*env).GetMethodID(clazz, "add", "(java/lang/Object)V"), _str);
}
return obj;
for further information see:
http://download.oracle.com/javase/1.4.2/docs/guide/jni/spec/functions.html
这篇关于将向量转换为C ++ / JNI中的jobject?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文