पर एक स्ट्रिंग लौटने पर मैं जंग के लिए बहुत नया हूं। मैं एक पास्ट फ़ंक्शन से String
कैसे लौटा सकता हूं जिसका उपयोग पायथन में किया जा सकता है?रास्ट फ़ंक्शन से पाइथन
use std::ffi::CString;
#[no_mangle]
pub extern fn query() -> CString {
let s = CString::new("Hello!").unwrap();
return s;
}
और अजगर कोड है कि यह कॉल:
from ctypes import cdll, c_char_p
lib = cdll.LoadLibrary("target/release/libtest.so")
result = lib.query()
print(c_char_p(result).value)
मैं एक विभाजन गलती मिलती है, जब अपनी दौड़
यहाँ मेरी जंग कार्यान्वयन है।
संपादित करें: व्लादिमीर Matveev की जंग कोड का उपयोग नीचे मैं इसे अपने अजगर कोड में परिवर्तन के साथ काम करने के लिए मिल सकता था:
from ctypes import *
lib = cdll.LoadLibrary("target/release/libtest.so")
lib.query.restype = c_char_p
result = lib.query()
print cast(result, c_char_p).value
lib.free_query(result)
कृपया http: // stackoverflow की समीक्षा करें।कॉम/प्रश्न/30440068/विभाजन-गलती-कब-कॉलिंग-ए-जंग-lib-with-ruby-ffi और http://stackoverflow.com/questions/30312885/pass-python-list-to-embedded-rust- फ़ंक्शन/30313295 # 30313295 और हमें बताएं कि आपका प्रश्न अलग-अलग कैसे है। – Shepmaster
मैंने उन दोनों सवालों की समीक्षा की है, और वे अलग-अलग हैं। पहले में, कॉल रूबी से आता है और मेरा सवाल पायथन से है। दूसरे प्रश्न में, वापसी मूल्य एक पूर्णांक है, जो एक साधारण मामला है। यहां, वापसी विशेष रूप से एक स्ट्रिंग मान है। – LeeMobile
जंग की तरफ बिल्कुल कुछ भी अलग नहीं है जिसे आप जिस भाषा से बुला रहे हैं उसके आधार पर बदलना चाहिए। जहां तक जंग कोड का सवाल है, सी इसे बुला रहा है। हर दूसरी भाषा कॉल कर रही है जो सी कोड की तरह दिखती है। – Shepmaster