我的 Java 应用程序需要使用输入值调用 Cpp 库进行计算,然后将结果传回
因为有几个输入数据:short[]
,少数int
和float
,输出包含两个 short[]
,很少ints
和float
,我认为将两个Java对象inputObject
和outputObject
传递给Cpp端。在Cpp方面,我调用那些getXXX()
方法和setXXX()
方法来获取输入并获得输出。
我知道我需要在Cpp方面getMethodID
调用 get 和 set 方法。但是我找不到任何CallShortArray()
可用,例如CallIntMethod()
用于int。
有办法吗?
我可以在不超过inputObject
的情况下传递单个输入参数来绕过输入数据部分。但对于ouput short [] s,如果没有outputObject
,我找不到办法。
另一个问题是关于 getMethodID 方法的 last 参数。是否有文件告诉我签名字符串 不同的方法?
答案 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[])
它的返回类型签名为J
(long
)。因此,将所有内容与"(" arg-types ")" ret-type
模板放在一起,我们可以确定完整的签名是这样的:
(ILjava/lang/String;[I)J