Mam bibliotekę Rust, która musi zostać zaimportowana do Pythona za pośrednictwem modułu ctypes. Moim celem jest użycie funkcji Rust, które pobierają argumenty jako argumenty i zwracają te typy z Pythona. Obecnie mogę przekazywać liczby całkowite do funkcji Rust i mieć ich listy zwracane/liczby całkowite. Oto aktualny kod:Przekaż listę Pythona do funkcji Rust
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] }
}
Co muszę pomóc przechodzi listę Pythona jako argument do funkcji Rust. Domyślam się, że przekazuję ctypes.ARRAY
do funkcji, a nie do listy, ale nie jestem pewien, jak przejść do konwersji listy Pythona na ten typ.
Uwaga: próbowałem kodu Rust z this related question, ale jest napisane "łączenie z` gcc` nie powiodło się: kod zakończenia: 1 "i" zły adres relok "podczas próby skompilowania go.
Czy można wpadać na to pytanie? Nikt tego teraz nie zobaczy i wolałbym, aby ludzie odpowiedzieli na to pytanie, a nie na nowe. – pengowen123
Tak, jestem w systemie Windows. Dzięki za poinformowanie mnie, mógłbym to zrobić, ale łatwiej byłoby użyć tablicy. Jednak nie byłoby zbyt trudno zrobić wektor z wydajnością, o której myślę, więc jeśli mogę przekazać tablicę do funkcji, może to zrobić konwersję. Popraw mnie, jeśli się mylę. – pengowen123