Sono molto nuovo a Rust. Come posso restituire un String
da una funzione di Rust che può essere utilizzata in Python?Restituire una stringa dalla funzione Ruggine a Python
Qui è la mia realizzazione Rust:
use std::ffi::CString;
#[no_mangle]
pub extern fn query() -> CString {
let s = CString::new("Hello!").unwrap();
return s;
}
E il codice Python che lo chiama:
from ctypes import cdll, c_char_p
lib = cdll.LoadLibrary("target/release/libtest.so")
result = lib.query()
print(c_char_p(result).value)
ottengo un errore di segmentazione quando la sua corsa.
EDIT: Usando il codice della ruggine di Vladimir Matveev di seguito sono riuscito a farlo funzionare con le modifiche al mio codice python:
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)
Rivedere http: // StackOverflow.it/questions/30440068/segmentation-fault-when-calling-a-rug-lib-with-ruby-ffi e http://stackoverflow.com/questions/30312885/pass-python-list-to-embedded-rust- funzione/30313295 # 30313295 e facci sapere come la tua domanda è diversa. – Shepmaster
Ho esaminato entrambe le domande e sono diverse. Nella prima, la chiamata proviene da Ruby e la mia domanda proviene da Python. Nella seconda domanda, il valore restituito è un numero intero, che è un caso semplice. Qui, il ritorno è specificamente un valore stringa. – LeeMobile
Non c'è assolutamente nulla di diverso sul lato Ruggine che dovrebbe cambiare a seconda della lingua da cui si sta chiamando. Per quanto riguarda il codice Rust, C lo sta chiamando. Ogni altra lingua chiama ciò che sembra codice C ad esso. – Shepmaster