gpt4 book ai didi

java - JNI 结构对齐

转载 作者:行者123 更新时间:2023-11-28 03:05:25 28 4
gpt4 key购买 nike

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

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

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

[1] #pragma pack effect

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

最佳答案

#pragma pack 会影响编译器处理代码的方式,直到它看到另一个 #pragma pack#pragma pop,因此您可以根据需要使用不同对齐方式的许多不同结构。只要在包含 jni.h 时没有 pack 设置,就可以了。确保这一点的最简单方法是在包含任何具有自定义对齐的结构定义之前包含 JNI header 。

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

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

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

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

关于java - JNI 结构对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19856048/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com