在我需要包裝的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