首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JNI/Kotlin:能把代表传递给JNI吗?

JNI/Kotlin:能把代表传递给JNI吗?
EN

Stack Overflow用户
提问于 2018-11-28 05:47:48
回答 1查看 579关注 0票数 1

我正在工作JNI,我想知道是否可以通过delegate进行通信。

例如:

Kotlin

代码语言:javascript
复制
typealias MessageReceived = (msg: String) -> Unit

external fun RegisterCallback(callback: MessageReceived)

C++ (JNI)

代码语言:javascript
复制
JNIEXPORT void Java_some_package_name_Foo_RegisterCallback(JNIEnv* env, jobject, void (*MessageReceived)(jstring msg)) {
    if (MessageReceived != nullptr) {
        char buffer[260] = {0};
        sprintf(buffer, "Callback registered!");
        jstring messageJStr = env->NewStringUTF(buffer);
        MessageReceived(messageJStr);
        env->DeleteLocalRef(messageJStr);
    }
}

这不可能吗?

当我运行这段代码时,我无法访问并获得SIGSEGV (地址访问受保护)。

我找到了,但对我来说似乎很复杂。

谢谢你的关心

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-28 06:21:57

是的是可能的。

MessageReceived的类型应该是jobject

要调用委托,您需要:

  • 通过MessageReceived查找GetObjectClass
  • 通过GetMethodID查找方法(我不确定方法名是什么)
  • 使用CallVoidMethod调用它

您可以找到示例这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53512917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档