Java JNI/Kotlin:是否可以将委托传递给JNI?
我正在使用JNI,我想知道是否可以通过Java JNI/Kotlin:是否可以将委托传递给JNI?,java,c++,kotlin,java-native-interface,Java,C++,Kotlin,Java Native Interface,我正在使用JNI,我想知道是否可以通过委托进行通信 例如: Kotlin typealias MessageReceived = (msg: String) -> Unit external fun RegisterCallback(callback: MessageReceived) C++(JNI) JNIEXPORT void Java\u some\u package\u name\u Foo\u RegisterCallback(JNIEnv*env,jobject,voi
委托
进行通信
例如:
Kotlin
typealias MessageReceived = (msg: String) -> Unit
external fun RegisterCallback(callback: MessageReceived)
C++(JNI)
JNIEXPORT void Java\u some\u package\u name\u Foo\u RegisterCallback(JNIEnv*env,jobject,void(*MessageReceived)(jstring msg)){
if(MessageReceived!=nullptr){
字符缓冲区[260]={0};
sprintf(缓冲区,“已注册回调!”);
jstring messageJStr=env->NewStringUTF(缓冲区);
MessageReceived(messageJStr);
env->DeleteLocalRef(messageJStr);
}
}
不可能吗
当我运行此代码时,我无法访问和获取SIGSEGV(地址访问保护)
我发现了,但我觉得很复杂
感谢您的关注是的,这是可能的
您收到的消息的类型应为jobject
要调用委托,您需要:
- 查找
MessageReceived
class byGetObjectClass
- 通过
GetMethodID
- 使用
CallVoidMethod
您可以找到示例我的意思是,没有jmethodID或其他东西。您不能在没有“jmethodID或其他东西”的情况下调用java方法:)我还找到了关于CallXXXMethod
,但它应该是在本机调用包装类中定义的目标方法。我想知道是否可以通过传递它来调用委托。对不起,我的英语不好。所有的CallXXXMethod
都是一样的。唯一的区别是被调用方法的类型。