dll करण सी पुस्तकालयों को एक पुस्तकालय में एक और भाषाओं से इस्तेमाल किया जा सकता है?



स्कूल लाइब्रेरी (1)

सबसे पहले, जंग को इंगित करें कि आप सी को दृश्यमान फ़ंक्शन बनाना चाहते हैं:

#[no_mangle]
pub extern "C" fn some_func() { ... }

यह जंग को आउटपुट प्रतीक को उलझाने और सी एबीआई का उपयोग करने से बचने के लिए कहता है।

इसके बाद, सीमा पार करते समय आपको सी-संगत प्रकारों का उपयोग करने की आवश्यकता होगी। यहां कुछ सलाह दी गई है जो मेरे लिए काम करती है:

  • यदि आप अपर्याप्त डेटा के रूप में सी को जंग की संरचना को पारित करने की योजना बना रहे हैं, जो इसे अन्य कार्यों में वापस भेज देगा, इसे एक Box<T> रूप में वापस कर दें, और इसे एक &T या Box<T> । अनिवार्य रूप से, इसका मतलब है कि आप जंग में संरचना का स्वामित्व छोड़ रहे हैं, और सी कोड को स्वामित्व दे रहे हैं। सी कोड को यह सुनिश्चित करना चाहिए कि यदि यह सूचक को वापस उस फ़ंक्शन में पास करता है जो बॉक्स लेता है, तो यह अब इसका उपयोग नहीं करता है
  • यदि आप सी संरचना के रूप में सी को जंग की संरचना को पारित करने की योजना बना रहे हैं, तो जंग आसानी से सी-संगत तरीके से अपने structs का प्रतिनिधित्व करता है। हालांकि, आप इन structs में दिए गए मानों को उन प्रकारों पर सीमित करना चाहते हैं जिनके पास संगत सी प्रस्तुतिकरण भी हैं। निश्चित रूप से संख्यात्मक प्रकार और बुलियन सुरक्षित हैं।
  • core::raw तहत दस्तावेज़ों में आप अधिक जटिल प्रकारों (जैसे वीसीएस और स्ट्रिंग्स) के जंग का प्रतिनिधित्व देख सकते हैं। ए &str और &[T] raw::Slice रूप में दर्शाए जाते हैं जबकि एक Vec<T> को raw::Vec रूप में दर्शाया जाता है।
  • आप प्रकार को libc::types में भी परिवर्तित कर सकते हैं
  • अंत में, आप खुद को पॉइंटर्स के साथ सीधे काम करने की आवश्यकता महसूस कर सकते हैं। उपयोगी एपीआई के लिए std::mem

ऐसी पुस्तकालय लिखना मुझे std बलिदान देना होगा? उदाहरण के लिए, यदि मैं संभव हो तो जंगली पुस्तकालय में पाइथन बाइंडिंग कैसे लिखूं?