2012-06-07 65 views
0

我有一个简单的DLL,它公开的方法与返回类型爪哇JNA C++对方法映射

std::pair<int, string> 

我使用JNA,我想知道如何可以在一对结构要使用的结构基类映射。可以像Pair<T,E> extends Structure这样的事情完成吗?

谢谢。

回答

1

简短的回答是否定的,你不能将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; 
} 
+0

谢谢你的回答。我结束了一个不同的方法。我创建了两个字段的结构(丢失任何通用/模板方法),并将其从C++方法返回给java。在Java中,我创建了一个镜像结构并使用引用语义来访问返回的结构。 – Radu