我在c ++上有一个String数组,我需要将其返回给Java类。 我怎样才能做到这一点?
我已经尝试过了:
string paroleord[app.size()];
jobjectArray ret;
ret = (jobjectArray)env->NewObjectArray(app.size(),env->FindClass("java/lang/String"), 0);
for (int k = 0; k < app.size(); k++)
{
env->SetObjectArrayElement(ret, k,env->NewStringUTF(paroleord[k]));
}
return ret;
但是我有一个错误,因为NewStringUTF需要一个对象作为参数,您能帮我吗?
答案 0 :(得分:0)
如果您可以使用Vector
或Array
生存下来,则可以简单地从C ++代码返回集合。
这将需要一些“低级”编码,但这非常简单。
在这里看看:
http://jnicookbook.owsiak.org/recipe-no-045/
关于字符串本身,请看这里:
http://jnicookbook.owsiak.org/recipe-No-010/
此外,请确保将string
转换为字符数组。
(*env)->NewStringUTF(env, my_string.c_str());
答案 1 :(得分:0)
您可以使用Scapix Java Link C ++ JNI库在许多C ++和Java类型之间自动转换。这是example:
#include <scapix/java_api/java/lang/System.h>
#include <scapix/java_api/java/util/Locale.h>
#include <scapix/java_api/java/text/DateFormatSymbols.h>
using namespace scapix::link::java;
using namespace scapix::java_api;
void test1()
{
// C++ objects are automatically converted to and from corresponding Java types.
// This works for any type supported by scapix::link::java::convert() interface,
// which supports many STL types and can be extended for your own types.
std::string version = java::lang::System::getProperty("java.version");
std::vector<std::string> languages = java::util::Locale::getISOLanguages();
std::vector<std::vector<std::string>> zone_strings = java::text::DateFormatSymbols::getInstance()->getZoneStrings();
std::map<std::string, std::string> properties = java::lang::System::getProperties();
}