Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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
通过Java';s集合到C++;使用JNA_Java_C++_Collections_Jna - Fatal编程技术网

通过Java';s集合到C++;使用JNA

通过Java';s集合到C++;使用JNA,java,c++,collections,jna,Java,C++,Collections,Jna,在发布这个问题之前,我做了彻底的研究。我正在对JNA和JNI做出结论。为此,我真的需要知道: 强>如何使用JNA将java集合传递给C++?< /强> 每当我试图找到这个问题的答案时,我总是通过JNI得到结果。请务必让我知道JNA是如何处理这一问题的。是通过回调机制还是什么? JNA不直接与C++工作。它在引擎盖下使用libffi,直接与本机C层接口。要处理C++代码,需要使用代码>外部“C”位,需要JNA与./P>接口。 使用类似C的接口,所有Java到本机的数据都以字节的形式传递。在集合的

在发布这个问题之前,我做了彻底的研究。我正在对JNA和JNI做出结论。为此,我真的需要知道:

<>强>如何使用JNA将java集合传递给C++?< /强>


每当我试图找到这个问题的答案时,我总是通过JNI得到结果。请务必让我知道JNA是如何处理这一问题的。是通过回调机制还是什么?

JNA不直接与C++工作。它在引擎盖下使用

libffi
,直接与本机C层接口。要处理C++代码,需要使用代码>外部“C”<代码>位,需要JNA与./P>接口。 使用类似C的接口,所有Java到本机的数据都以字节的形式传递。在集合的情况下,它将在连续内存中作为一个C数组背靠背多个字节

如果您可以控制DLL/本机接口,则有两种选择:

  • 传递数据的实际(连续)数组
  • 将一个(连续的)指针数组传递给可能在别处的数据
在这两种情况下,都没有直接从Java传递
集合的机制。您必须对数组进行某种转换,要么转换为数据本身,要么转换为指向它的指针


如果你没有API的控制,那么API已经定义了你必须如何通过集合。

除了一些例外之外,不可能将java的集合和数据类型映射到C++程序所能识别的东西。假设中间会有一个步骤,将Java集合中的数据复制到本机数据结构中,然后传递数据结构。您能突出显示这些异常吗?同样在JNI中,我看到我们可以回调方法从列表中获取数据,或者映射关于JNA中该策略对应项的任何想法?我不知道您发现了什么,但是没有这样的“回调”。通常发生的是,使用JNI方法从集合中提取java对象,然后通过读取更多JNI调用的字段,将这些java对象转换成规则C++对象。