Разбор значения из метода в другой метод JNI (C ++) - PullRequest
0 голосов
/ 28 февраля 2019

Можно ли сделать вызов другого метода, подобного этому?

JNIEXPORT void JNICALL Java_A(JNIEnv *env, jobject obj) {
    int h = 0; 
    Java_B();
}

JNIEXPORT void JNICALL Java_B(JNIEnv *env, jobject obj) {
    h++;
}

Я знаю, что код не имеет смысла, но с принципом все в порядке?

1 Ответ

0 голосов
/ 28 февраля 2019

Не точно , как это, потому что функция Java_A() пытается вызвать Java_B() со списком аргументов, который не соответствует параметрам последнего.Но поскольку возникает вопрос, может ли одна реализация нативного метода вызывать другую напрямую, да, может, точно так же, как она может вызывать любую другую функцию C, доступную для него.Ничто по своей сути не мешает этому.

ОДНАКО семантика такого вызова не эквивалентна семантике вызова (нативного) метода для одного и того же объекта Java, будь то Java или нативно через JNI.Например, прямой вызов обходит любую синхронизацию метода на стороне Java и не является полиморфным.Кроме того, в случае прямого вызова вы работаете только с одним выделением локальных ссылок для обеих функций вместе.Могут быть и другие, похожие соображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...