解決c-union結構XEvent問題。在Rust中解決聯合結構FFI
我用的Xlib和X記錄擴展魯斯特試驗。我使用rust-bindgen生成了ffi綁定。所有代碼託管在github上alxkolm/rust-xlib-record。
故障發生在線路src/main.rs:106當我嘗試從XEvent結構中提取數據。
let key_event: *mut xlib::XKeyEvent = event.xkey(); println!("KeyPress {}", (*key_event).keycode); // this always print 128 on any key
我的節目聽重點事件並打印出keycode
。但是在我按任何鍵時總是128。我認爲從C聯合類型到Rust類型的這種錯誤轉換。 XEvent的
定義從這裏開始src/xlib.rs:1143。這是C聯盟。原始C定義here。從GitHub
代碼可以通過cargo run
命令運行。它的編譯沒有錯誤。
我做錯了什麼?
您能否準確指出您遇到的錯誤?如果您有編譯時錯誤,那麼編譯器錯誤消息將會很有用;如果你有加載時間錯誤,那麼...或者是你總是得到'128'並且期待別的東西的問題? – 2014-11-03 13:33:11
在任何按鍵上,我按下鍵碼總是128.它是完全可編譯的,沒有錯誤。修復問題的文本。 – alxkolm 2014-11-03 14:00:49
你是否檢查過事件的類型是你期望的?生成的Rust代碼會盲目服從你:你要求'xkey'對應地解釋內存,但是如果它不是按鍵事件,而是別的東西,那麼它就沒有意義。 – 2014-11-03 15:13:48