将向量转换为C ++ / JNI中的jobject? [英] convert vector to jobject in C++/JNI?

查看:1077
本文介绍了将向量转换为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆