JNA将等效的Swift指针从Java Android传递给C

docker开发人员:

我有点想将Java中的Swift代码的实现传递给C。我会用JNA在Java和Matlab生成的C代码之间进行集成的任何建议,将不胜感激。

这是Swift调用:

GetResult(uptime, &result_out)

它映射到C代码:

void GetResult(double time, Result_t *Result)

C结构Result_t对于此处而言太大,但是它是double和int的组合。

我了解&result_out是快速指针吗?如何最好地实现与Java中的Swift指针等效的功能,然后将其传递给C,该C需要一个指向Result_t的指针,正如我提到的那样,Result_t是由双精度和整数组成的结构。

丹尼尔·威迪斯(Daniel Widdis):

&表示可变的存储器地址。在这种情况下,它表示Result结构的内存地址

在C语言中,您可以看到*用于表示同一事物符号:作为第二个参数传递的变量是基础数据的引用/内存地址。

它们通常成对出现:如果foo定义了变量,则可以轻松地传递&foo到任何需要使用指向指针foo的方法,而该方法本身使用*表示法让您知道它需要该指针。

对于许多JNA结构,您需要密切注意这些符号。例如,知道是否通过int或是IntByReference关键。但是幸运的是(为了便于编写代码,或不幸的是为了保持一致性),JNA Structure的行为有所不同。最重要的是,默认情况下,当将a Structure包含为方法/函数(最常见的应用程序)的参数时,将使用指针或ByReference结构的版本。因此,在这种特殊情况下,假设您已将class Result extends Structure所有信息都映射到,则只需传递resultwhere即可result = new Result();

有多种方法可以使用ByReferenceByValue覆盖此默认行为,但这超出了您的问题范围。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章