Rust FFI指南(http://static.rust-lang.org/doc/master/guide-ffi.html)很好地演示瞭如何導入使用由Rust std::lib
庫包裝的標準C類型(如size_t
)的C函數。但是,如何將第三方庫中定義的C數據結構帶入Rust程序?Rust中如何定義或從第三方庫導入C結構體?
我與libmemcached工作,它具有以下功能:
memcached_st* memcached_create(memcached_st *ptr)
這通常是在C程序中調用,像這樣(以踢東西了):
#include <libmemcached/memcached.h>
// ...
memcached_st *memc;
memc = memcached_create(NULL);
的memcached_st
是一個不透明的C結構體 - 我如何在Rust程序中聲明和使用它?這裏是我的失敗嘗試至今:
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);
}
}
和
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);
}
}
我相信使用空的枚舉通常比單位結構更受歡迎,因爲這樣就沒有構造函數了。除此之外,這很重要。 –