Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JNA将相当于swift指针的内容从Java Android传递到C_Java_Android_C_Java Native Interface_Jna - Fatal编程技术网

JNA将相当于swift指针的内容从Java Android传递到C

JNA将相当于swift指针的内容从Java Android传递到C,java,android,c,java-native-interface,jna,Java,Android,C,Java Native Interface,Jna,我在尝试将这个Swift代码在Java中的实现传递给C时遇到了一点困难。如果我使用JNA在Java和Matlab生成的C代码之间进行集成,我将不胜感激 这是Swift电话: GetResult(uptime, &result_out) 它映射到C代码: void GetResult(double time, Result_t *Result) C结构结果对于这里来说太大了,但是它是double和int的组合 我明白&结果是一个快速的指针?如何最好地在Java中实现Swift指针的等价

我在尝试将这个Swift代码在Java中的实现传递给C时遇到了一点困难。如果我使用JNA在Java和Matlab生成的C代码之间进行集成,我将不胜感激

这是Swift电话:

GetResult(uptime, &result_out)
它映射到C代码:

void GetResult(double time, Result_t *Result)
C结构结果对于这里来说太大了,但是它是double和int的组合

我明白&结果是一个快速的指针?如何最好地在Java中实现Swift指针的等价物,然后将其传递给C,C需要一个指向结果的指针,正如我所提到的,结果是由双精度和整数组成的结构。

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

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

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

对于许多JNA结构,您需要密切关注这些符号。例如,知道是传递int还是IntByReference是关键。但幸运的是,为了便于编写代码,或者不幸的是为了一致性,JNA结构类的行为是不同的。底线是,默认情况下,当一个结构作为一个方法/函数的参数包含在最常见的应用程序中时,将使用该结构的指针或ByReference版本。所以在这种特殊情况下,假设您已经映射了一个包含所有信息的类Result extends结构,您只需在Result=newresult;的位置传递Result即可

有几种方法可以使用ByReference和ByValue来覆盖此默认行为,但这超出了问题的范围