Вы хотите вызвать этот метод: common_traceroute_main(int op, char **argv)
Вы должны создать общую библиотеку, используя код из github.Взгляните сюда
http://jnicookbook.owsiak.org/recipe-No-001/
Получив свою библиотеку, вы должны подготовить параметры внутри Java и передать их в код JNI, где вам нужно распаковать их и преобразовать в то, чтоожидается common_traceroute_main
.
Например.Вы можете передать массив String
и преобразовать их в char **argv
.
http://jnicookbook.owsiak.org/recipe-No-009/
Затем все, что вам нужно сделать, это вызвать common_traceroute_main
из вашей оболочки JNI.
черновик решения
Вам понадобится код Java, например, что-то вроде этого
public class TraceCaller {
public static native callTraceRoute(int op, String[] args);
}
, как только вы скомпилируете его с помощью javac -h headers TraceCaller
, вы получитенайти заголовочный файл C.
Внутри этого заголовочного файла вам нужно будет извлечь значения из массива строк.Посмотрите здесь (https://github.com/mkowsiak/jnicookbook/blob/master/recipeNo038/java/recipeNo038/PassHashMap.java), чтобы получить представление о том, как извлечь String
объекты из массива внутри кода JNI
и превратить их в char*
.
Как только вы это сделаете (внутри JNI
) и: int op
и массив char *
, вы можете просто вызвать подпрограмму: common_traceroute_main
.
Как только она закончится, вы должны передать данные обратно (либо как возвращаемое значение, либо через объект, переданный вJNI).
Посмотрите здесь пример, который показывает, как передать String
обратно в Java:
https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo010
И все готово:)