Arbeiten mit c_void in einem FFI

Ich bin kämpfen, mit übergabe eines struct durch eine FFI, die nimmt void und Lesen Sie es zurück an das andere Ende.

Die Bibliothek in Frage libtsm, ein terminal-Zustand-Maschine. Es ermöglicht Ihnen, feed-Eingang und dann finden Sie heraus, in welchem Zustand sich ein terminal wäre nach der Eingabe.

Erklärt er seinen draw Funktion als:

pub fn tsm_screen_draw(con: *tsm_screen, draw_cb: tsm_screen_draw_cb, data: *mut c_void) -> tsm_age_t;

wo tsm_screen_draw_cb ist ein callback implementiert werden, indem die Benutzer der Bibliothek mit der Signatur:

pub type tsm_screen_draw_cb = extern "C" fn(
  con: *tsm_screen,
  id: u32,
  ch: *const uint32_t,
  len: size_t,
  width: uint,
  posx: uint,
  posy: uint,
  attr: *tsm_screen_attr,
  age: tsm_age_t,
  data: *mut c_void
);

Ist der wichtige Teil hier ist die data parameter. Es ermöglicht dem Benutzer zu übergeben, die durch einen Zeiger auf eine selbst implementierte Zustand, um es zu manipulieren und verwenden Sie es nach der Zeichnung. Eine einfache Struktur:

struct State {
  state: int
}

wie würde ich das richtig? Ich bin unsicher, wie man richtig cast der Zeiger auf die struct void und zurück.

InformationsquelleAutor Skade | 2014-06-12
Schreibe einen Kommentar