首页 > 解决方案 > 在 C/C++ 中使用布尔数组参数调用 JAVA 的布尔数组方法

问题描述

我需要使用 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 方法的示例。

标签: javac++cjava-native-interface

解决方案


推荐阅读