Java JNA C ++对方法映射

时间:2012-06-07 08:54:05

标签: java c++ dll jna

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

的方法
std::pair<int, string>

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

感谢。

1 个答案:

答案 0 :(得分:1)

简短的回答是否定的,您无法将C ++模板映射到Java Generics中。虽然看起来很相似,但它们完全不同。

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

首先确定您的货币对的数据偏移量 使用对应于对数据偏移的偏移量的字段创建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;
}