Я обновил jvm openvr binding до последних openvr версии, 1.0.5, но я не уверен в одном.Как реализовать в jna структуру sizeof() с объединенным типом
В 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
Теперь enum переводит на Int
, но последний? Так как это должен быть указатель, я думаю, это должно быть Pointer.SIZE
?
Однако это моя реализация, где VROverlayIntersectionMaskPrimitive_Data_t
это абстрактный класс:
abstract class VROverlayIntersectionMaskPrimitive_Data_t : Structure {
constructor() : super()
constructor(peer: Pointer) : super(peer)
}
Реализовано в свою очередь, с помощью two other classes.
Мои first guess что 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)
ли появляются правильно мои рассуждения?
ваши слова очень запутывают ... что это о 'sizeof'- вы на самом деле думаете, что это ключевое слово - это какой-то тип данных? Ну, это не так. Его оператор C/C++ ** ** и он даст результат типа 'size_t' - без указателей, если вы не хотите получать размер определенного указателя ... что на самом деле является хорошей идеей, поскольку даже указатели могут быть разных размеров, в зависимости от вашей архитектуры – specializt
Извините, моя ошибка, я изменил, надеюсь, теперь ясно – elect