在我需要包装的DLL的头文件中使用BSTR数据类型作为I/O参数。我需要在JNA中创建它的映射。我已经发现下面的例子:JNA中BSTR数据类型的映射
class BSTR extends PointerType {
public BSTR() { }
public BSTR(String value) {
super(new Memory(value.length()*2+6).share(4));
getPointer().setInt(-4, value.length()*2);
getPointer().setString(0, value, true);
}
public String toString() {
int length = getPointer().getInt(-4);
char[] data = getPointer().getCharArray(0, length/2);
return new String(data);
}
}
但使用它在JNA方法调用之后的结果是空的(=长度为0并且没有数据)。你有任何建议如何创建正确的映射为BSTR使用它作为I/O参数的功能?它看起来像BSTR没有通过引用DLL方法传递,所以结果仍然是空的,但它只是我的假设。也许映射是正确的,但在方法调用中被错误地使用。提前感谢您的任何建议。
的Memory.share()调用创建一个内部类SharedMemory实例,它具有对原始Memory对象的隐式引用。所以ctor中的原始用法没有任何问题。 – technomage 2011-12-11 13:51:23