c-union 구조체 XEvent를 해결하는 데 문제가 있습니다.루스트 FFI에서 공용 구조체 해결
나는 Xlib과 X Record Extension in Rust로 실험 중이다. 나는 rust-bindgen으로 ffi 바인딩을 생성합니다. 모든 코드는 github alxkolm/rust-xlib-record에서 호스팅됩니다.
XEvent 구조에서 데이터를 추출하려고 할 때 문제가 발생했습니다 (src/main.rs:106).
let key_event: *mut xlib::XKeyEvent = event.xkey(); println!("KeyPress {}", (*key_event).keycode); // this always print 128 on any key
내 프로그램은 키 이벤트를 듣고 keycode
을 출력합니다. 그러나 내가 누르는 키에 항상 128입니다. C 노조 유형에서 녹 유형으로의 잘못된 변환이라고 생각합니다.
XEvent의 정의는 여기에서 시작합니다. src/xlib.rs:1143. 그것은 노동 조합입니다. 원본 C 정의 here.
GitHub의 코드는 cargo run
명령으로 실행할 수 있습니다. 오류없이 컴파일됩니다.
내가 뭘 잘못 했니?
발생하는 오류를 정확하게 지정할 수 있습니까? 컴파일 타임 오류가 발생하면 컴파일러 오류 메시지가 유용합니다. 로드 시간 오류가 발생하면 ... 아니면 항상'128'을 얻고 다른 것을 기다리고있는 문제입니까? –
키를 누를 때마다 키 코드는 항상 128입니다. 오류없이 완벽하게 편집 할 수 있습니다. 질문의 텍스트를 수정하십시오. – alxkolm
이벤트 유형이 예상 한 것임을 확인 했습니까? 생성 된 Rust 코드는 맹목적으로 당신에게 복종한다 : 메모리를 해석하는'xkey '를 요구한다. 그러나 그것이 키 눌린 이벤트가 아니라 다른 것이면, 그것은 이해가되지 않을 것이다. –