[将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是由双精度和整数组成的结构。
&
表示变量的内存地址。在这种情况下,它表示Result
结构的内存地址。
在C中,您可以看到*
符号用于表示同一件事:作为第二个参数传递的变量是基础数据的引用/内存地址。
这些通常成对出现:如果定义了变量foo
,则可以轻松地将&foo
传递给任何需要指向foo
指针的方法,而该方法本身使用*
表示法来告知您需要该指针。
对于许多JNA结构,您需要密切注意这些符号。例如,知道是否通过int
或IntByReference
是关键。但是幸运的是(为了便于编写代码,或者很不幸地是为了保持一致性),JNA Structure
类的行为有所不同。最重要的是,默认情况下,当将Structure
用作方法/函数(最常见的应用程序)的参数时,将使用指针或结构的ByReference
版本。因此,在这种特殊情况下,假设您已将class Result extends Structure
与所有信息映射在一起,则只需在result
处传递result = new Result();
。
有多种方法可以使用ByReference
和ByValue
覆盖此默认行为,但这不在您的问题范围内。