gpt4 book ai didi

java - 如何在JNA中实现具有联合类型的结构sizeof()

转载 作者:行者123 更新时间:2023-12-02 13:15:20 25 4
gpt4 key购买 nike

我将jvm openvr binding更新为最新的openvr版本1.0.5,但是我不确定一件事。

在cpp中,具有此虚拟 IVROverlay 函数的SetOverlayIntersectionMask类:

virtual EVROverlayError SetOverlayIntersectionMask(
VROverlayHandle_t ulOverlayHandle,
VROverlayIntersectionMaskPrimitive_t *pMaskPrimitives,
uint32_t unNumMaskPrimitives,
uint32_t unPrimitiveSize = sizeof( VROverlayIntersectionMaskPrimitive_t ) ) = 0;

我的疑问涉及最后一个论点。

VROverlayIntersectionMaskPrimitive_t :
struct VROverlayIntersectionMaskPrimitive_t
{
EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType;
VROverlayIntersectionMaskPrimitive_Data_t m_Primitive;
};

是具有枚举类型和联合类型变量的结构,称为 VROverlayIntersectionMaskPrimitive_Data_t :
typedef union
{
IntersectionMaskRectangle_t m_Rectangle;
IntersectionMaskCircle_t m_Circle;
} VROverlayIntersectionMaskPrimitive_Data_t;

上面的两个类 IntersectionMaskRectangle_t IntersectionMaskCircle_t 正在实现

现在,该枚举可转换为 Int,但后者是吗?由于它应该是一个指针,所以我猜它应该是 Pointer.SIZE

但这是我的实现,其中 VROverlayIntersectionMaskPrimitive_Data_t 是一个抽象类:
abstract class VROverlayIntersectionMaskPrimitive_Data_t : Structure {

constructor() : super()
constructor(peer: Pointer) : super(peer)
}

依次由 two other classes实现。

我的 first guesssizeof(VROverlayIntersectionMaskPrimitive_Data_t)转换为 Int + Pointer.SIZE
@JvmOverloads fun setOverlayIntersectionMask(
ulOverlayHandle: VROverlayHandle_t,
pMaskPrimitives: VROverlayIntersectionMaskPrimitive_t.ByReference,
unNumMaskPrimitives: Int,
unPrimitiveSize: Int = Int.BYTES + Pointer.SIZE)

我的推理是否正确?

最佳答案

您可以使用Structure方法获得Union(包括size())的大小。对于工会,您将获得最大成员的人数。

您可以使用Union.setType()设置所需的联合类型。

关于java - 如何在JNA中实现具有联合类型的结构sizeof(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41693912/

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