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