Ich habe eine Rust-Bibliothek, die über das Ctypes-Modul in Python importiert werden muss. Mein Ziel ist es, Rust-Funktionen zu verwenden, die Vec<T>
/i32
als Argumente annehmen und diese Typen von Python zurückgeben. Zur Zeit kann ich Ganzzahlen an die Rust-Funktionen übergeben und sie Listen/Ganzzahlen zurückgeben lassen. Hier ist der aktuelle Code:Python-Liste an Rust-Funktion übergeben
Python:
import ctypes
from ctypes import cdll
class List_4(ctypes.Structure):
_fields_ = [("array", ctypes.ARRAY(ctypes.c_int32, 4))]
rust = cdll.LoadLibrary("target/debug/py_link.dll")
rust.function_vec.restype = List_4
foobar = rust.function_i32(5)
barbaz = rust.function_vec([1, 2, 3, 4]) # Throws error: Don't know how to convert parameter
print foobar
print barbaz
Rust:
#[repr(C)]
pub struct List_4 {
array: [i32; 4]
}
#[no_mangle]
pub extern fn function_i32(number: i32) -> i32 {
number
}
#[no_mangle]
pub extern fn function_vec(list: List_4) -> List_4 {
List_4 { array: [1, 2, 3, 5] }
}
Was ich brauche Hilfe mit einer Python-Liste als Argument an eine Rust Funktion übergeben. Meine beste Vermutung ist es, eine ctypes.ARRAY
an die Funktion statt eine Liste zu übergeben, aber ich bin mir nicht sicher, wie man eine Python-Liste in diesen Typ konvertieren soll.
Hinweis: Ich habe versucht, die Rust-Code von this related question aber es sagt "Verknüpfung mit` gcc` fehlgeschlagen: Exit-Code: 1 "und" schlechte Umzug Adresse ", wenn ich versuche, es zu kompilieren.
Ist es möglich, diese Frage zu stoßen? Niemand wird es jetzt sehen, und ich möchte lieber, dass die Leute diese Frage beantworten, nicht eine neue. – pengowen123
Ja, ich bin auf Windows. Danke, dass du mich informiert hast, ich könnte beides tun, aber es wäre einfacher, ein Array zu verwenden. Es wäre jedoch nicht zu schwierig, einen Vektor mit einer Kapazität zu erstellen, die ich denke. Wenn ich also ein Array an die Funktion übergeben kann, könnte es eine Konvertierung durchführen. Korrigiere mich, wenn ich falsch liege. – pengowen123