Вызов методов Java из C/C++
Мне нужно вызвать некоторые методы Java с помощью C/C++, а затем мне нужно использовать DPI в UVM или system verilog для вызова методов C. У меня нет доступа к файлам JAVA или классам JAVA. У меня есть файл .jar, в котором присутствует мой класс, к которому мне нужно получить доступ.
Я использую путь этого .файл jar в
options.optionString = "-Djava.class.path= путь к файлу .jar
Я могу найти класс с помощью
clsH = env->FindClass("com/act/testdev/pa5/PA5");
Но я не могу получить идентификатор метода. Я знаю только имя метода в классе java, который является булевым методом с булевыми аргументами
com.act.testdev.pa5.PA5.aes_encrypt(key_data, pt_data);
Этот метод используется в каком-то другом языке, и вот его код:
boolean[] aes_encrypt(boolean key_data[], boolean pt_data[]) { return com.act.testdev.pa5.PA5.aes_encrypt(key_data, pt_data); }
Вот код, который я пытаюсь использовать, чтобы получить methodID:
if (clsH != NULL) { //midMain = env->GetMethodID(clsH, "<init>", "([Z[Z)[Z"); midMain = env->GetMethodID(clsH, "aes_encrypt", "([Z[Z)[Z"); printf("\n FOUND able to find the requested class midMain ==%x ==%x\n",midMain,clsH); } else { printf("\nUnable to find the requested class\n"); } if (midMain != NULL) { //jstring StringArg = env->NewStringUTF("\nTestCall:Called from the C Program\n"); printf("\nable to find the requested Method\n"); jbooleanArray BoolArg1 = env->NewBooleanArray(128); jbooleanArray BoolArg2 = env->NewBooleanArray(128); env->CallBooleanMethod(clsH,midMain,BoolArg1,BoolArg2); //env->CallStaticVoidMethod(clsH, midMain, NULL); //Calling the main method. //env->CallBooleanMethod(clsH, midMain, BoolArg); //Calling the main method. }
Пожалуйста, помогите мне в этом, как я могу получить доступ к этому методу в c/c++. есть еще несколько методов, которые мне нужно вызвать таким же образом, как только я смогу вызвать это, я попробую их позже. Я не имею никакого представления о JAVA, я получил этот код онлайн в качестве примера того, как вызывать методы java из c/c++.
Что я уже пробовал:
Я создал а CTest.cpp файл, в котором я только что дал путь к файлу .jar, который имеет классы java. и я просто использую эту команду для выполнения файла .cpp
г++ -я/мягкая/УО/jdk1.8.0_11/включить-я/мягкая/УО/jdk1.8.0_11/числе/Линукс -л/мягкие/УО/jdk1.8.0_11/среда jre/lib В/архитектуры AMD64/сервер -ljvm CTest.cpp