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 函数签名,任何帮助将不胜感激。
在这里更改 2 件事:
- 双倍[][] 到双倍[]
- 添加具有
reinterpret_cast
的强制转换
所以在你的 JNI 函数调用中,你必须做 -reinterpret_cast<I_REAL const *const*>(&inputs)
调用 C 函数的位置。
希望这有帮助。
您可以像从double
数组中读取一样直接从jdouble* incoming
读取。