2016-04-23 23 views
1

有沒有什麼辦法可以爲JNA庫中的所有數據結構(* .dll Java wrapper)設置全局內存字節對齊方式?如何爲JNA庫中的所有結構設置全局內存字節對齊方式?

有時我必須通過試驗和錯誤在實施過程中確定正確的對齊方式,目前我以非常笨拙的方式進行此操作 - 我在每個結構中設置數據對齊方式(超級(ALIGN_NONE))(很多結構在不同的文件中)。

編輯: 解決我的問題,最好的辦法是擴展結構:

public abstract class StructureAligned extends Structure { 
    public static final int STRUCTURE_ALIGNMENT = ALIGN_NONE; 

    protected StructureAligned() { 
     super(STRUCTURE_ALIGNMENT); 
    } 

    protected StructureAligned(Pointer p) { 
     super(p, STRUCTURE_ALIGNMENT); 
    } 
} 

..但是這導致了下一個問題:哪(指針)構造更好,原因如下:

super(p, STRUCTURE_ALIGNMENT); 

super(STRUCTURE_ALIGNMENT); 
read(); 

super(STRUCTURE_ALIGNMENT); 
useMemory(p); 
read(); 

+0

堆上的所有數據結構都是8字節對齊的。你能舉一個你的意思嗎? –

+0

我的意思是基於com.sun.jna.Structure的結構中字段的n字節對齊。這個問題連接到http://stackoverflow.com/questions/36747228/c-c-struct-to-java-jna-structure-pointer-to-struct – jakson

回答

2

製作您自己的Structure子類,並使用所需的對齊類型調用相應的構造函數,或者在構造函數中調用setAlignType()

如果JNA沒有正確計算平臺上最常用編譯器的適當默認對齊方式,那麼您應該針對JNA提交一個錯誤。

但是,如果您有一個庫因其自身的內部原因而簡單地使用一堆任意對齊,那麼通過通用基類關閉對所有Structure類的對齊更合適。

相關問題