javajnac++;配对法映射

javajnac++;配对法映射,java,c++,dll,jna,Java,C++,Dll,Jna,我有一个简单的dll,它公开了一个返回类型为的方法 std::pair<int, string> std::pair 我正在使用JNA,我想知道如何使用结构基类映射成对结构。像Pair extensed Structure这样的事情可以做吗 谢谢。 < P>简短的答案是否定的,你不能把C++模板映射成java泛型。虽然它们看起来很相似,但却是完全不同的东西 答案稍微长一点,是的,您可以映射它,尽管过程是手动的。如果打算在单个平台上运行,那么这可能是值得的 首先确定数据对的偏移量,

我有一个简单的dll,它公开了一个返回类型为的方法

std::pair<int, string>
std::pair 我正在使用JNA,我想知道如何使用结构基类映射成对结构。像
Pair extensed Structure
这样的事情可以做吗


谢谢。

< P>简短的答案是否定的,你不能把C++模板映射成java泛型。虽然它们看起来很相似,但却是完全不同的东西

答案稍微长一点,是的,您可以映射它,尽管过程是手动的。如果打算在单个平台上运行,那么这可能是值得的

首先确定数据对的偏移量,然后 创建一个JNA结构,其中字段的偏移量对应于对数据偏移量

// C++
typedef std::pair<int,string> mypair;
mypair* p = (mypair *)0;
offset_t PADDING1 = (char*)&p->first - (char*)p;
offset_t PADDING2 = (char*)&p->second - (char *)p;

// Java
class MyPair extends Structure {
    public byte[] = byte[PADDING1]; // omit if PADDING1 is zero
    public first;
    public byte[] = byte[PADDING2]; // omit if PADDING2 is zero
    public second;
}
<代码> /C++ typedef std::pair mypair; mypair*p=(mypair*)0; 偏移量填充1=(字符*)&p->first-(字符*)p; 偏移量填充2=(字符*)&p->second-(字符*)p; //爪哇 类MyPair扩展结构{ 公共字节[]=字节[PADDING1];//如果PADDING1为零,则忽略 公共优先; 公共字节[]=字节[PADDING2];//如果PADDING2为零,则忽略 公共第二; }
谢谢您的回答。我最终采用了不同的方法。我创建了一个两个字段的结构(不管是什么泛型/模板方法),并将它从C++方法返回到java。在java中,我创建了一个镜像结构,并使用引用语义访问返回的结构。