Java 如何在jna中实现具有联合类型的sizeof()结构

Java 如何在jna中实现具有联合类型的sizeof()结构,java,kotlin,jna,openvr,Java,Kotlin,Jna,Openvr,我将更新到最新版本1.0.5,但有一点我不确定 在cpp中,存在具有此虚拟函数的IVROverlay类: virtual EVROverlayError SetOverlayIntersectionMask( VROverlayHandle_t ulOverlayHandle, VROverlayIntersectionMaskPrimitive_t *pMaskPrimitives, uint32_t unNum

我将更新到最新版本1.0.5,但有一点我不确定

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

virtual EVROverlayError SetOverlayIntersectionMask(
             VROverlayHandle_t ulOverlayHandle, 
             VROverlayIntersectionMaskPrimitive_t *pMaskPrimitives, 
             uint32_t unNumMaskPrimitives, 
             uint32_t unPrimitiveSize = sizeof( VROverlayIntersectionMaskPrimitive_t ) ) = 0;
我的怀疑是关于最后一个论点

:

是具有枚举类型和联合类型变量的结构,称为:

这是由上面的两个类实现的

现在,枚举转换为
Int
,但是后者呢?既然它应该是一个指针,我想它应该是
指针。SIZE

然而,这是我的实现,其中是一个抽象类:

abstract class VROverlayIntersectionMaskPrimitive_Data_t : Structure {

    constructor() : super()
    constructor(peer: Pointer) : super(peer)
}
由各部门轮流实施

我的意思是
sizeof(VROverlayIntersectionMaskPrimitive\u Data\u t)
转换为
Int+指针。SIZE

@JvmOverloads fun setOverlayIntersectionMask(
                ulOverlayHandle: VROverlayHandle_t,
                pMaskPrimitives: VROverlayIntersectionMaskPrimitive_t.ByReference, 
                unNumMaskPrimitives: Int, 
                unPrimitiveSize: Int = Int.BYTES + Pointer.SIZE)

我的推理似乎正确吗?

您可以使用
size()
方法获得
结构的大小(包括
联合
)。在工会的情况下,您将获得最大成员的大小


您使用
union.setType()

设置了所需的联合类型。您的文字非常混乱。。。关于
sizeof
,你真的认为这个关键字是某种数据类型吗??嗯,不是。它是一个C/C++运算符,它将生成类型为
size\t
的结果-不涉及指针,除非您想要检索特定指针的大小。。。这实际上是一个好主意,因为根据您的体系结构,即使指针也可以有不同的大小对不起,我的错误,我修改了,我希望现在很清楚我如何检查/查询联合的哪个结构?jna有什么办法吗?这是特定于实现的。通常,联合在每个成员中都有一个公共的“类型”字段,或者您可以从使用它的上下文中辨别出来。
abstract class VROverlayIntersectionMaskPrimitive_Data_t : Structure {

    constructor() : super()
    constructor(peer: Pointer) : super(peer)
}
@JvmOverloads fun setOverlayIntersectionMask(
                ulOverlayHandle: VROverlayHandle_t,
                pMaskPrimitives: VROverlayIntersectionMaskPrimitive_t.ByReference, 
                unNumMaskPrimitives: Int, 
                unPrimitiveSize: Int = Int.BYTES + Pointer.SIZE)