JNI将一个字符串从java传递给c++,然后将c++字符串传递给字符串数组

阿维·帕特尔

我在java中声明了本地方法。

static
{
    // Replace "Myfile" with the name of your Native File
    System.loadLibrary("JohnnyX");
}

// Declare your native methods here
public static native String string(StringBuffer sb);

并将字符串缓冲区传递给它。

System.out.println(string(sb));

在我的 JohnnyX.cpp 中,我使用以下方法将 java 字符串转换为 c++ 字符串。

std::string jstring2string(JNIEnv *env, jstring jStr) 
{
    if (!jStr)
        return "";

    const jclass stringClass = env->GetObjectClass(jStr);
    const jmethodID getBytes = env->GetMethodID(stringClass, "getBytes", "(Ljava/lang/String;)[B");
    const jbyteArray stringJbytes = (jbyteArray) env->CallObjectMethod(jStr, getBytes,
                                                                       env->NewStringUTF("UTF-8"));

    size_t length = (size_t) env->GetArrayLength(stringJbytes);
    jbyte *pBytes = env->GetByteArrayElements(stringJbytes, NULL);

    std::string ret = std::string((char *) pBytes, length);
    env->ReleaseByteArrayElements(stringJbytes, pBytes, JNI_ABORT);

    env->DeleteLocalRef(stringJbytes);
    env->DeleteLocalRef(stringClass);
    return ret;
}

extern "C" JNIEXPORT jstring JNICALL Java_com_example_rsolver_Solver_string(JNIEnv *env, jobject object,jstring string) {
    // Converting Java String into C++ String and calling a "solution" method and passing c++ string
    return solution(jstring2string(env,string));
}

我的解决方法是:

string solution (string argv[]) {
    // this will return a string
}

我的问题是如何将 c++ 字符串传递给解决方案中的字符串数组(字符串 argv[])?

奥拉夫·迪切

一个简单的解决方案是临时字符串对象

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_rsolver_Solver_string(JNIEnv *env, jobject object,jstring string) {
    // Converting Java String into C++ String and 
    // calling a "solution" method and passing c++ string
    std::string tmp{jstring2string(env,string)};
    return solution(&tmp);
}

这为 提供了一个包含 1 个元素的数组solution但是solution()不知道这个数组有多少个元素,所以你也必须加上数组大小

std::string solution (int size, std::string argv[]) {
    // this will return a string
}

// ...
std::string tmp{jstring2string(env, string)};
return solution(1, &tmp);

更好的是,跳过原始数组,并传递 a std::vectorof std::strings

std::string solution (const std::vector<std::string> &argv) {
    // this will return a string
}

// ...
std::vector<std::string> tmp = { jstring2string(env, string) };
return solution(tmp);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将图像从c ++传递给Haskell并返回一个字符串

来自分类Dev

将字符串参数传递给另一个字符串

来自分类Dev

如何将一个字符串值传递给COUNTIF?

来自分类Dev

将 Int 传递给枚举并返回一个字符串

来自分类Dev

将C#字符串数组传递给C ++

来自分类Dev

将字符串数组传递给C中的函数

来自分类Dev

C ++将字符串数组传递给函数

来自分类Dev

将参数列表作为一个字符串传递给python函数

来自分类Dev

如何将字符数组传递给字符串

来自分类Dev

将指向(char)的指针数组传递给函数,并为每个数组分配一个字符串

来自分类Dev

Ionic 2:当我将数组传递给组件时,我在 component.ts 上得到一个字符串

来自分类Dev

将字符串传递给Asyntask

来自分类Dev

将字符串传递给Audio()

来自分类Dev

将字符串传递给函数

来自分类Dev

将字符串传递给函数

来自分类Dev

将等号传递给字符串

来自分类Dev

将字符串数组传递给prop vue

来自分类Dev

将字符串数组传递给Robotium类

来自分类Dev

将字符串数组传递给WCF服务错误

来自分类Dev

如何将字符串数组传递给函数?

来自分类Dev

如何将两个字符串从Swift传递给C ++函数,并获取一个整数数组?

来自分类Dev

将字符串数组传递给另一个活动

来自分类Dev

分割一个字符串,并使用python3将第一个参数传递给elif块中的函数

来自分类Dev

从 JNI (C++) 代码返回一个字符串到 Java

来自分类Dev

如何将字符串数组指针传递给新的字符数组?在 C

来自分类Dev

将多个字符串读为一个字符串?C ++

来自分类Dev

将字符串文字传递给C

来自分类Dev

C结构;克服将字符串传递给char

来自分类Dev

将C ++字符串传递给ac#函数

Related 相关文章

热门标签

归档