JNI java to Cpp with short array

时间:2013-04-30 19:06:06

标签: java java-native-interface

我的 Java 应用程序需要使用输入值调用 Cpp 库进行计算,然后将结果传回

因为有几个输入数据:short[],少数intfloat输出包含两个 short[] ,很少intsfloat,我认为将两个Java对象inputObjectoutputObject传递给Cpp端。在Cpp方面,我调用那些getXXX()方法和setXXX()方法来获取输入并获得输出。

我知道我需要在Cpp方面getMethodID调用 get set 方法。但是我找不到任何CallShortArray()可用,例如CallIntMethod()用于int。

有办法吗?

我可以在不超过inputObject的情况下传递单个输入参数来绕过输入数据部分。但对于ouput short [] s,如果没有outputObject,我找不到办法。

另一个问题是关于 getMethodID 方法的 last 参数。是否有文件告诉我签名字符串 不同的方法?

1 个答案:

答案 0 :(得分:2)

数组只是一个对象。因此,如果您有一个返回short[]的函数,则可以使用CallObjectMethod()调用它,并将结果作为jobject,然后您可以将其转换为jshortarray。< / p>

有关最后一个参数(sig)到GetMethodID()如何工作的说明,请参阅Type Signatures的说明。您需要确定每个方法的参数及其返回值的类型签名,然后将它们合适地放在一起。例如,这种方法:

long f (int n, String s, int[] arr); 

它有三个参数,根据上面链接中的表格具有这些类型的签名:

I                     (int)
Ljava/lang/String;    (java.lang.String)
[I                    (int[])

它的返回类型签名为Jlong)。因此,将所有内容与"(" arg-types ")" ret-type模板放在一起,我们可以确定完整的签名是这样的:

(ILjava/lang/String;[I)J