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);
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage