1

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

因为有几个输入数据:a short[]、fewintfloats,而输出包含两个short[]、fewintsfloats,我想传递两个 Java 对象,inputObject并传递outputObject给 Cpp 端。在 Cpp 方面,我调用这些getXXX()方法和setXXX()方法来获取输入并获取输出。

我知道我需要getMethodID在 Cpp 端调用这些getset方法。但我找不到任何CallShortArray()可用的,比如CallIntMethod()int。

有办法吗?

我可以在没有上述内容的情况下传递单个输入参数inputObject来绕过输入数据部分。但是对于输出 short[]s,没有它我找不到办法outputObject

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

4

1 回答 1

2

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

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

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

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

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

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

(ILjava/lang/String;[I)J
于 2013-04-30T19:33:18.720 回答