gpt4 book ai didi

java - 捕获 C++ lambda 表达式错误中的 JNIENV*

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:00 26 4
gpt4 key购买 nike

我的 Main.cpp 文件中有一个这样的 JNI 调用:

JNIEXPORT jstring   JNICALL
Java_packagename_MainActivity_GenerateAlphabet(JNIEnv *env, jobject thiz)
{
generateAlphabet([](string letters, string numbers) {
return (env)->NewStringUTF("test");

});
}

但是这段代码给我错误:

jni/Main.cpp:在 lambda 函数中:

jni/Main.cpp:86:33: 错误:未捕获“env”

我真的需要在 lambda 函数中使用 env,谁能帮帮我。

编辑:

接受的答案解决了问题,但请记住,您不能在 lambda 表达式中返回值。

最佳答案

您可以使用[env]env 放入捕获列表中。

但是,这是一个非常的坏主意。捕获的 env 仅对特定线程有效。如果您的 lambda 在不同的线程上被调用,那么结果将不会被定义。

可以在您的 lambda 中捕获 JavaVM* 指针(您可以从传递的 env 中获取),并使用 AttachCurrentThread 以在 lambda 中检索适当的 env

关于java - 捕获 C++ lambda 表达式错误中的 JNIENV*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31611580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com