Wie kann ich in Rust eine C-Struktur aus einer Drittanbieter-Bibliothek definieren oder importieren?
Der Rust FFI-Führer (http://static.rust-lang.org/doc/master/guide-ffi.html) zeigt gut, wie man C-Funktionen importiert, die Standard-C-Typen verwenden, die vom Rust umschlossen werdenstd::lib
Bibliothek, wiesize_t
. Aber wie bringe ich C-Datenstrukturen, die in Bibliotheken von Drittanbietern definiert sind, in ein Rust-Programm?
Ich arbeite mitlibmemcached, die folgende Funktion hat:
memcached_st* memcached_create(memcached_st *ptr)
Das wird normalerweise wie folgt in einem C-Programm aufgerufen (um die Dinge anzufangen):
#include <libmemcached/memcached.h>
// ...
memcached_st *memc;
memc = memcached_create(NULL);
Dasmemcached_st
ist eine opake C-Struktur - wie deklariere und verwende ich das in einem Rust-Programm? Hier sind meine fehlgeschlagenen Versuche:
use std::libc::*;
use ptr;
#[link(name = "memcached")]
extern {
struct memcached_st; // error: unexpected token: `struct`
memcached_st* memcached_create(memcached_st *ptr);
}
fn main() {
unsafe {
let memc = memcached_create(ptr:null());
println!("{:?}", memc);
}
}
und
use std::libc::*;
use ptr;
#[link(name = "memcached")]
extern {
// error: unexpected token: `memcached_st`
memcached_st* memcached_create(memcached_st *ptr);
}
fn main() {
unsafe {
let memc = memcached_create(ptr:null());
println!("{:?}", memc);
}
}