2017-01-17 22 views
-1

jvm openvr binding을 마지막으로 openvr 버전 1.0.5로 업데이트했지만 한 가지 확실하지 않습니다. cpp에있는jna에서 구조체 sizeof()를 공용 형식으로 구현하는 방법

이 가상 SetOverlayIntersectionMask 기능으로 IVROverlay 클래스가 :

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

내 의심은 마지막 인수를 간주한다.

VROverlayIntersectionMaskPrimitive_t :

typedef union 
{ 
    IntersectionMaskRectangle_t m_Rectangle; 
    IntersectionMaskCircle_t m_Circle; 
} VROverlayIntersectionMaskPrimitive_Data_t; 
오른쪽 위의 두 개의 클래스가 구현되는

, IntersectionMaskRectangle_tIntersectionMaskCircle_t :

struct VROverlayIntersectionMaskPrimitive_t 
{ 
    EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType; 
    VROverlayIntersectionMaskPrimitive_Data_t m_Primitive; 
}; 

VROverlayIntersectionMaskPrimitive_Data_t라는 열거 형과 연합 형 변수 구조체이며

이제 enum은 Int으로 변환되지만 후자는? 포인터이어야하므로 Pointer.SIZE이 될 것 같습니까?

abstract class VROverlayIntersectionMaskPrimitive_Data_t : Structure { 

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

two other classes에 의해 다시 구현 :

그러나이 VROverlayIntersectionMaskPrimitive_Data_t는 추상 클래스 내 구현이다.

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) 

로 변환 내 추론이 정확 나타 납니까 있다는 first guess를 내?

+0

당신의 말은 매우 혼란 스럽습니다 ... whats that about 'sizeof'- 당신은 실제로이 키워드가 어떤 종류의 데이터 유형이라고 생각합니까 ?? 글쎄, 그렇지 않아. 그것의 C/C++ ** 연산자 ** 그리고'size_t' 타입의 결과를 얻을 것입니다 - 당신이 특정 포인터의 크기를 검색하기를 원하지 않는다면 ... 포인터도 포함될 수 있기 때문에 사실 좋은 생각입니다. 귀하의 아키텍처에 따라 다른 크기의, – specializt

+0

죄송합니다, 내 실수, 수정, 희망이 지금은 분명하다 – elect

답변

2

size() 방법으로 Structure (Union 포함)의 크기를 얻을 수 있습니다. 노조의 경우 가장 큰 회원의 크기를 알 수 있습니다.

유니온의 원하는 유형을 Union.setType()으로 설정합니다.

+0

노조의 구조체는 무엇입니까 확인/쿼리 할 수 ​​있습니까? jna에서 오는 길은 있니? – elect

+0

구현에 따라 다릅니다. 일반적으로 노동 조합은 각 구성원에 공통 "유형"필드를 갖거나 사용 된 컨텍스트에서 알 수 있습니다. – technomage

+0

드디어 맞았 어, 고마워! – elect