如何将字符串数组从C ++返回到Java(JNI)

时间:2019-07-19 10:25:55

标签: java c++ arrays string java-native-interface

我在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需要一个对象作为参数,您能帮我吗?

2 个答案:

答案 0 :(得分:0)

如果您可以使用VectorArray生存下来,则可以简单地从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();
}