में सी फ़ंक्शन पॉइंटर्स में इंटरफ़ेस बनाएं, मैंने शायद मेरे प्रश्न शीर्षक को सही तरीके से वर्णित नहीं किया हो, कृपया आवश्यकता होने पर इसे संपादित करें।जंग
मैं टोकरे को LXC library, जो सी
मैं सफलतापूर्वक lxc_get_version
या lxc_container_new
की तरह साधारण कार्यों कहा जाता है में लिखा है के लिए एक जंग इंटरफ़ेस कोशिश कर रहा हूँ, लेकिन मैं struct lxc_container
ब्लॉक में वर्णित कार्यों के लिए उपयोग नहीं कर सकते। यहाँ
#[link(name = "lxc")]
extern {
// LXC part
fn lxc_get_version() -> *const c_char;
fn lxc_container_new(name: *const c_char, configpath: *const c_char) -> LxcContainer;
// LXC container parts
fn is_defined(container: &LxcContainer) -> bool;
}
और एक त्रुटि है:
यहाँ मेरी कोड का एक हिस्सा है
note: test.o: In function `LxcContainer::is_defined::heb2f16a250ac7940Vba':
test.0.rs:(.text._ZN12LxcContainer10is_defined20heb2f16a250ac7940VbaE+0x3e): undefined reference to `is_defined'
संपादित करें: मैं कामयाब रहे कि सी structs अंदर कार्यों समारोह संकेत कहा जाता है। मैंने "जंग सी फ़ंक्शन पॉइंटर" जैसे कुछ Google को करने का प्रयास किया है, लेकिन बिना किस्मत के।
struct S {
void (*f)(int, long)
}
इसका मतलब है कि struct S
एक क्षेत्र f
कहा जाता है जो एक समारोह के लिए सूचक है शामिल हैं:
उत्तर के लिए धन्यवाद, अब मैं फ़ंक्शन पॉइंटर्स तक पहुंच प्राप्त कर सकता हूं। मैंने सी प्रतिनिधित्व के लिए एक संरचना और इसके चारों ओर जंग के प्रतिनिधित्व के लिए एक रैपर लिखा है। दुर्भाग्यवश मैं 'is_defined' पर कॉल नहीं कर सकता क्योंकि मैं LxcContainer संरचना को * LxcContainer के रूप में कार्य करने के लिए पास नहीं कर सकता। Dereference त्रुटि होती है। क्या आप कृपया अपने उत्तर में फ़ंक्शन पॉइंटर कॉलिंग का कुछ उदाहरण जोड़ सकते हैं? धन्यवाद। – bbrodriges
@bbrodriges, देर से उत्तर के लिए खेद है, लेकिन मैंने संरचना के क्षेत्रों में संग्रहीत कार्यों को कॉल करने के उदाहरण के साथ अपना उत्तर अपडेट किया है। –