CPP菜鸟在这里。我试图从我的Java应用程序调用库函数。需要帮助来匹配我的Java类中C函数的数据类型
C函数签名
#define I_REAL double
int myfunction(int size,
I_REAL const *const *inputs,
I_REAL const *options,
I_REAL *const *outputs);
我的Java本机方法签名(这可能是错误的,我不确定const *const *inputs
将如何在Java中转换)
public static native int myfunction(int size,
final double[][] inputs,
final double[] options,
final double[][] outputs);
然后我使用javac Myclass.java -h .
然后我实现了我的cpp代码-
JNIEXPORT jint JNICALL Java_com_raj_myfunction
(JNIEnv *, jclass, jint, jobjectArray, jdoubleArray, jobjectArray)
{
// something useful here
}
我遇到运行时错误-java.lang.NoSuchMethodError: com.raj.Myclass.myfunction(I[D[D[D)I
我在想我的Java本机方法签名有问题。我必须匹配C函数签名,不胜感激。
答案 0 :(得分:1)
在这里更改2件事:
reinterpret_cast
添加投射所以在您的jni函数调用中,您必须-
reinterpret_cast<I_REAL const *const*>(&inputs)
在调用C函数的位置。
希望这会有所帮助。
答案 1 :(得分:0)
您可以直接从jdouble* incoming
进行读取,就像从double
数组中进行读取一样。