Maybe it could be that's making a call to some alread compiled library?
Да - я думаю, вам нужна некоторая предыстория о том, что такое JNI. Позвольте мне быстро рассказать об этом, так как я думаю, что это прояснит ваше замешательство или, по крайней мере, направит вас на правильный путь.
Среды выполнения Java не могут работать на Java - они реализованы как собственные исполняемые файлы.
JNI (собственный интерфейс Java) - это, по сути, собственный интерфейс, позволяющий среде выполнения Java выполнять различные действия.
Помимо множества других вещей, вы можете использовать JNI для вызова методов, реализованных на Java.
В JNI есть множество различных вспомогательных методов для вызова различных типов методов.
В частности, метод, о котором вы спрашиваете, CallStaticVoidMethod
будет использоваться для вызова функции Java, такой как та, что в этом примере: public static void DoSomething() { ... }
Чтобы среда выполнения могла вызвать этот метод, ей необходимо знать несколько вещей, таких как: информация о текущей среде выполнения / контексте / среде (это параметр JNIEnv * env
), класс, в котором объявлен статический метод (это jclass cls
), вызываемый метод (это параметр jmethodID methodID
).
РЕДАКТИРОВАТЬ:
Продолжение вашего ответа:
Я нашел это без особых проблем в коде OpenJDK.
http://hg.openjdk.java.net/
cvmi / cvmi / jdk Общий интерфейс виртуальных машин
http://hg.openjdk.java.net/cvmi/cvmi/jdk/archive/tip.zip
Под:
./src/share/javavm/export/jni.h
void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {
va_list args;
va_start(args,methodID);
functions->CallStaticVoidMethodV(this,cls,methodID,args);
va_end(args);
}
Я не знаю, где это назначено: functions->CallStaticVoidMethodV
, но я уверен, что если вы столкнетесь с проблемой загрузки всего исходного кода для различных компонентов, вы найдете структуру с этим членом и / или назначением этому указателю функции - и вы можете пойти оттуда.
Поскольку это должен быть стандартный / общий интерфейс для нескольких сред выполнения, я не удивлюсь, если бы существовал некоторый уровень косвенности между фактической реализацией и тем, как она отображается через JNI.
person
Steve
schedule
24.02.2012