में यूनियन संरचना को हल करें मुझे सी-यूनियन संरचना XEvent को हल करने में समस्या है।जंग FFI
मैं जंग में एक्सलिब और एक्स रिकॉर्ड एक्सटेंशन के साथ प्रयोग कर रहा हूं। मैं rust-bindgen के साथ एफएफआई-बाइंडिंग उत्पन्न कर रहा हूं। सभी कोड 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 होता है। मुझे लगता है कि सी यूनियन प्रकार से जंग प्रकार के लिए यह गलत रूपांतरण है।
XEvent की परिभाषा src/xlib.rs:1143 से शुरू होती है। यह सी-यूनियन है। मूल सी परिभाषा here।
गिटहब से कोड cargo run
कमांड द्वारा चलाया जा सकता है। यह त्रुटियों के बिना संकलित है।
मैं क्या गलत करता हूं?
क्या आप वास्तव में त्रुटि का सामना कर सकते हैं? यदि आपके पास संकलन-समय त्रुटि है, तो संकलक त्रुटि संदेश उपयोगी होगा; यदि आपके पास लोड समय त्रुटि है, तो ... या वह समस्या है जिसे आप हमेशा '128' प्राप्त करते हैं और कुछ और उम्मीद कर रहे थे? –
किसी भी कुंजी पर मैं हमेशा कुंजीकोड दबाता हूं 128. यह त्रुटियों के बिना पूरी तरह से संकलित है। प्रश्न का पाठ ठीक करें। – alxkolm
क्या आपने जांच की है कि ईवेंट का प्रकार आप किस चीज की अपेक्षा करेंगे? जेनरेटेड जंग कोड आपको अंधेरे से पालन करता है: आप 'xkey' के लिए पूछते हैं, यह स्मृति को संगत रूप से व्याख्या करता है, हालांकि अगर यह एक महत्वपूर्ण दबाया गया ईवेंट नहीं था लेकिन कुछ और नहीं, तो यह समझ में नहीं आता है। –