Ich bin neu in Rust. Wie würde ich eine String
von einer Rust-Funktion zurückgeben, die in Python verwendet werden kann?Rückgabe eines Strings von der Rust-Funktion an Python
Hier ist meine Rust Umsetzung:
use std::ffi::CString;
#[no_mangle]
pub extern fn query() -> CString {
let s = CString::new("Hello!").unwrap();
return s;
}
Und der Python-Code, der es nennt:
from ctypes import cdll, c_char_p
lib = cdll.LoadLibrary("target/release/libtest.so")
result = lib.query()
print(c_char_p(result).value)
ich einen Segmentation Fault, wenn sein Lauf bekommen.
EDIT: Mit Vladimir Matveev des Rust-Code unten ich konnte es mit den Änderungen an meinem Python-Code zu arbeiten:
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)
Bitte überprüfen Sie http: // stackoverflow.com/questions/30440068/segmentierung-fault-wenn-rust-lib-mit-ruby-ffi und http://stackoverflow.com/questions/30312885/pass-python-list-to-embedded-rust- Funktion/30313295 # 30313295 und lassen Sie uns wissen, wie sich Ihre Frage unterscheidet. – Shepmaster
Ich habe beide Fragen überprüft, und sie unterscheiden sich. In der ersten kommt der Aufruf von Ruby und meine Frage stammt von Python. In der zweiten Frage ist der Rückgabewert eine ganze Zahl, was ein einfacher Fall ist. Hier ist die Rückgabe speziell ein String-Wert. – LeeMobile
Es gibt absolut nichts anderes auf der Rust-Seite, die sich je nach der Sprache, aus der Sie anrufen, ändern sollte. Soweit der Rust-Code betroffen ist, ruft C ihn an. Jede andere Sprache ruft etwas an, das wie C-Code aussieht. – Shepmaster