我需要使用C / C ++调用一些Java方法然后我需要在UVM或系统verilog中使用DPI来调用C方法。 我无法访问JAVA文件或JAVA类。我有一个.jar文件,其中包含我需要访问哪些方法的类。我在
中使用该.jar文件的路径options.optionString = "-Djava.class.path= path of .jar file
我可以使用
找到课程clsH = env->FindClass("com/act/testdev/pa5/PA5");
但我无法获取方法ID。我只知道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>", "(ZZ)V");
midMain = env->GetMethodID(clsH, "aes_encrypt", "(ZZ)V");
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的想法我在网上得到这个代码作为如何从c / c ++调用java方法的一个例子。