Potrei non aver descritto correttamente il titolo della mia domanda, per favore modificalo se necessario.Creare un'interfaccia per i puntatori di funzioni C in Rust
Sto cercando di cassa di un'interfaccia Rust a LXC library, che è scritto in C.
ho chiamato con successo funzioni semplici come lxc_get_version
o lxc_container_new
ma non posso accedere alle funzioni descritte in struct lxc_container
blocco.
Ecco una parte del mio codice:
#[link(name = "lxc")]
extern {
// LXC part
fn lxc_get_version() -> *const c_char;
fn lxc_container_new(name: *const c_char, configpath: *const c_char) -> LxcContainer;
// LXC container parts
fn is_defined(container: &LxcContainer) -> bool;
}
E qui è un errore:
note: test.o: In function `LxcContainer::is_defined::heb2f16a250ac7940Vba':
test.0.rs:(.text._ZN12LxcContainer10is_defined20heb2f16a250ac7940VbaE+0x3e): undefined reference to `is_defined'
EDIT: Sono riuscito che funzioni all'interno C struct è chiamato puntatori a funzione. Ho provato a google qualcosa come "Rust C function pointer", ma senza fortuna.
Grazie per la risposta, ora posso accedere ai puntatori di funzione. Ho scritto una struttura per la rappresentazione in C e un wrapper per la rappresentazione di Rust attorno ad essa. Sfortunatamente non posso effettuare una chiamata a 'is_defined' perché non riesco a passare la struct LxcContainer a funzionare come * LxcContainer. Si verifica un errore di dereference. Potresti aggiungere qualche esempio di puntatore a funzione che chiama nella tua risposta? Grazie. – bbrodriges
@bbrodriges, mi dispiace per la risposta in ritardo, ma ho aggiornato la mia risposta con un esempio di come chiamare le funzioni memorizzate nei campi struct. –