ReleaseStringUTFChars 不适用于 std::string

ReleaseStringUTFChars not working for std::string

我在我的 jni 函数中使用 std::string,但我无法使用 ReleaseStringUTFChars 释放它。 我得到的错误是:

错误:没有匹配函数调用 NIEnv::ReleaseStringUTF env->ReleaseStringUTFChars(path, dir);

我明白,函数期望得到的不是字符串,而是字符,但我没有这样的变量。我该怎么办?

这是我的 jni 函数:

void Java_com_example_android_OpenCVActivity_test (JNIEnv * env, jclass clazz, jstring path){

    std::string dir = env->GetStringUTFChars(path, 0);
   ....
env->ReleaseStringUTFChars(path, dir);
}

您需要传递给它的值与您从 GetStringUTFChars(). 获得的值完全相同。您不是。你传递的是 std::string 给你的任何东西,这不一定是同一件事。

书中Mastering Android NDK定义了函数

auto ConvertJString(JNIEnv* env, jstring str) -> std::string
{
    if (!str) { return std::string(); }
    auto const len = env->GetStringUTFLength(str);
    auto const strChars = env->GetStringUTFChars(str, static_cast<jboolean*>(0));
    std::string result(strChars, len);
    env->ReleaseStringUTFChars(str, strChars);
    return result;
}

这处理获取和释放字符串以及返回 std::string