Руководство RFI Rust (http://static.rust-lang.org/doc/master/guide-ffi.html) прекрасно демонстрирует, как импортировать функции C, которые используют стандартные типы C, которые обернуты библиотекой Rust std::lib
, например как size_t
. Но как мне привести структуры данных C, определенные в сторонних библиотеках, в программу Rust?
Я работаю с 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);
}
}