Использование интерфейсов в JNI - PullRequest
0 голосов
/ 18 марта 2010

Я пытаюсь использовать (*env)->RegisterNatives для добавления методов к определенному классу, который я затем добавляю в список обратных вызовов. Конечно, отправитель обратного вызова ожидает, что мой класс реализует определенный интерфейс, а я - нет. И не удается выполнить.

Если я добавлю ключевое слово «Implements Listener» в мой класс в Java, javac ожидает определения методов в Java или с нативным ключевым словом, которого я здесь стараюсь избегать, поскольку я хотел бы зарегистрировать методы в JNI_OnLoad и затем выполните одно из них.

Теперь возникает вопрос: можно ли реализовать интерфейс в JNI или избежать сообщения об ошибке в Java?

1 Ответ

2 голосов
/ 18 марта 2010

RegisterNatives не добавляет новые нативные методы, он регистрирует нативную функцию для существующего нативного метода в классе. Если кто-то не вызывает RegisterNatives для нативного метода, JVM будет искать во всех DLL библиотеках его реализацию при первом вызове метода.

Итак, добавьте implements Listener, запишите определения с ключевым словом native и зарегистрируйте их реализацию с RegisterNatives.

...