JNI结构对齐

吉科

我正在使用“ #pragma pack(1)”设置调用用VisualStudio 2005编译的DLL。因此,结构域(SA)无需填充即可快速访问数据[1]。我认为JVM是使用正常结构分配的[2]编译的。

所以我想知道我有什么选择?对该dll的调用(我不在Codecontrol中)正在通过包装dll(我在Codecontrol中)。

  1. 我可以从包装器中调用具有其他SA设置的dll吗?因此,从Java调用的Wrapper-Dll使用常规的SA设置,并调用使用#pragma pack(1)设置编译的dll。
  2. 是否可以在JNI中进行设置以调用设置了#pragma pack(1)的dll?
  3. 我也可以使用JNA。是否有可能进行这样的设置。

[1] #pragma pack效果

[2] http://www.velocityreviews.com/forums/t128433-jni-with-1-byte-alignment-crashes-jvm.html

技术

#pragma pack会影响编译器对待代码的方式,直到看到另一个#pragma pack为止#pragma pop,因此您可以根据需要拥有尽可能多的具有不同对齐方式的结构。只要您没有包含内容的pack设置,就jni.h可以了。最简单的方法是在包含任何具有自定义对齐的结构定义之前,先包含JNI标头。

JNA显式提供映射到的结构对齐方式“ none” #pragma pack(1),并且可以为整个库(即在该库接口内定义的所有结构)设置它:

interface MyLibrary extends Library {
    int STRUCTURE_ALIGNMENT = Structure.ALIGN_NONE;
}

或者,您可以为单个结构设置它:

class MyStructure extends Structure {
    public MyStructure() {
        super(ALIGN_NONE);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章