通过Java';s集合到C++;使用JNA
在发布这个问题之前,我做了彻底的研究。我正在对JNA和JNI做出结论。为此,我真的需要知道: <>强>如何使用JNA将java集合传递给C++?< /强>通过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到本机的数据都以字节的形式传递。在集合的
每当我试图找到这个问题的答案时,我总是通过JNI得到结果。请务必让我知道JNA是如何处理这一问题的。是通过回调机制还是什么?
JNA不直接与C++工作。它在引擎盖下使用
libffi
,直接与本机C层接口。要处理C++代码,需要使用代码>外部“C”<代码>位,需要JNA与./P>接口。
使用类似C的接口,所有Java到本机的数据都以字节的形式传递。在集合的情况下,它将在连续内存中作为一个C数组背靠背多个字节
如果您可以控制DLL/本机接口,则有两种选择:
- 传递数据的实际(连续)数组
- 将一个(连续的)指针数组传递给可能在别处的数据
集合的机制。您必须对数组进行某种转换,要么转换为数据本身,要么转换为指向它的指针
如果你没有API的控制,那么API已经定义了你必须如何通过集合。
除了一些例外之外,不可能将java的集合和数据类型映射到C++程序所能识别的东西。假设中间会有一个步骤,将Java集合中的数据复制到本机数据结构中,然后传递数据结构。您能突出显示这些异常吗?同样在JNI中,我看到我们可以回调方法从列表中获取数据,或者映射关于JNA中该策略对应项的任何想法?我不知道您发现了什么,但是没有这样的“回调”。通常发生的是,使用JNI方法从集合中提取java对象,然后通过读取更多JNI调用的字段,将这些java对象转换成规则C++对象。