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
。
我在我的 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
。