我有点想将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是由双精度和整数组成的结构。
在&
表示可变的存储器地址。在这种情况下,它表示Result
结构的内存地址。
在C语言中,您可以看到*
用于表示同一事物的符号:作为第二个参数传递的变量是基础数据的引用/内存地址。
它们通常成对出现:如果foo
定义了变量,则可以轻松地传递&foo
到任何需要使用指向指针foo
的方法,而该方法本身使用*
表示法让您知道它需要该指针。
对于许多JNA结构,您需要密切注意这些符号。例如,知道是否通过int
或是IntByReference
关键。但是幸运的是(为了便于编写代码,或不幸的是为了保持一致性),JNA Structure
类的行为有所不同。最重要的是,默认情况下,当将a Structure
包含为方法/函数(最常见的应用程序)的参数时,将使用指针或ByReference
结构的版本。因此,在这种特殊情况下,假设您已将class Result extends Structure
所有信息都映射到,则只需传递result
where即可result = new Result();
。
有多种方法可以使用ByReference
和ByValue
覆盖此默认行为,但这超出了您的问题范围。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句