JNA将swift指针的等效项从Java Android传递到C

问题描述 投票:0回答:1

[将Java中的这个Swift代码实现传递给C有点困惑。我会用JNA在Java和Matlab生成的C代码之间进行集成,对此我将不胜感激。

这是Swift调用:

GetResult(uptime, &result_out)

它映射到C代码:

void GetResult(double time, Result_t *Result)

C struct Result_t在这里太大,但是它是double和int的组合。

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

java android c java-native-interface jna
1个回答
0
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.