JNAライブラリ(* .dll Javaラッパー)内のすべてのデータ構造に対してグローバルメモリバイトアライメントを設定する方法はありますか?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);
}
}
..butこれは、次の質問につながった:(ポインタ)コンストラクタが優れていると理由:
super(p, STRUCTURE_ALIGNMENT);
または
super(STRUCTURE_ALIGNMENT);
read();
または
super(STRUCTURE_ALIGNMENT);
useMemory(p);
read();
?
ヒープ上のすべてのデータ構造は8バイトに整列しています。あなたが意味するものの例を挙げることができますか? –
com.sun.jna.Structureに基づく構造体のフィールドのnバイト整列を意味します。この質問はhttp://stackoverflow.com/questions/36747228/c-c-struct-to-java-jna-structure-pointer-to-structに関連しています。 – jakson