如何在jna中实现一个联合类型的结构sizeof()
我更新了jvm openvr绑定到最后一个openvr版本1.0.5,但我不确定一件事。
在cpp中,有这个虚拟SetOverlayIntersectionMask
函数的IVROverlay
类:
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) }
由其他两个类轮流执行。
我的第一个猜测是sizeof(VROverlayIntersectionMaskPrimitive_Data_t)
转换为Int + Pointer.SIZE
@JvmOverloads fun setOverlayIntersectionMask( ulOverlayHandle: VROverlayHandle_t, pMaskPrimitives: VROverlayIntersectionMaskPrimitive_t.ByReference, unNumMaskPrimitives: Int, unPrimitiveSize: Int = Int.BYTES + Pointer.SIZE)
我的推理是否正确?
您可以使用size()
方法获取Structure
(包括Union
)的size()
。 在工会的情况下,你会得到最大的成员的大小。
使用Union.setType()
设置所需的联合类型。