Я работаю в JNI и мне интересно, можно ли общаться через delegate
,
например:
Котлин
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 (адрес защищен).
я нашел этот, но мне кажется это сложным.
Спасибо за Ваш интерес
Да, это возможно.
Тип вашего MessageReceived
должно быть jobject
,
Для вызова делегата вам необходимо:
MessageReceived
класс по GetObjectClass
GetMethodID
CallVoidMethod
Вы можете найти пример Вот
Других решений пока нет …