gpt4 book ai didi

java - JNI/ Kotlin : Is it possible to pass delegate to JNI?

转载 作者:行者123 更新时间:2023-11-28 04:28:52 25 4
gpt4 key购买 nike

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

例如:

Kotlin

typealias MessageReceived = (msg: String) -> Unit

external fun RegisterCallback(callback: MessageReceived)


C++(JNI)

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(地址访问 protected )。

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

感谢您的关注

最佳答案

是的,这是可能的。

MessageReceived 的类型应该是 jobject

要调用委托(delegate),您需要:

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

你可以找到例子here

关于java - JNI/ Kotlin : Is it possible to pass delegate to JNI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53512917/

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