Być może nie opisałem poprawnie mojego tytułu pytania, w razie potrzeby edytuj go.Utwórz interfejs ze wskaźnikami funkcji C w Rust
Próbuję skrzyni interfejs rdzy LXC library, który jest napisany w C
Mam powodzeniem zwane proste funkcje jak lxc_get_version
lub lxc_container_new
ale nie mogę uzyskać dostęp do funkcji opisanych w struct lxc_container
bloku.
Tutaj jest część mojego kodu:
#[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;
}
I tu jest błąd:
note: test.o: In function `LxcContainer::is_defined::heb2f16a250ac7940Vba':
test.0.rs:(.text._ZN12LxcContainer10is_defined20heb2f16a250ac7940VbaE+0x3e): undefined reference to `is_defined'
EDIT: udało mi że funkcje wewnątrz struktur C nazywa wskaźników funkcji. Próbowałem google coś jak "Wskaźnik funkcji Rust C", ale bez powodzenia.
Dziękuję za odpowiedź, mogę teraz uzyskać dostęp do wskaźników funkcji. Napisałem strukturę dla reprezentacji C i otoki dla reprezentacji Rust wokół niej. Niestety nie mogę nawiązać połączenia z 'is_defined', ponieważ nie mogę przekazać struktury LxcContainer do działania jako * LxcContainer. Wystąpił błąd deskryptora. Czy mógłbyś dodać jakiś przykład wywołania funkcji do swojej odpowiedzi? Dziękuję Ci. – bbrodriges
@bbrodriges, przepraszam za spóźnioną odpowiedź, ale zaktualizowałem swoją odpowiedź na przykładzie sposobu wywoływania funkcji przechowywanych w polach struktury. –