0

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

std::pair<int, string>

我正在使用 JNA,我想知道如何使用 Structure 基类映射对结构。可以做类似Pair<T,E> extends Structure的事情吗?

谢谢。

4

1 回答 1

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;
}
于 2012-06-07T15:31:35.937 回答