Rustで共有ライブラリを作る際に必要だったCのconst char*をRustの&strにする方法
おはようございます。また次男が高熱が出ており、登園している保育園でインフルエンザが盛大に流行っているので、これから検査に病院に行く@kjunichiです。
背景
Rustで作ったwebcamrsをcrateではなく、共有ライブラリとする事で、node.jsのffi-napiから利用しようと思った。
Cのconst char*をRustのstrにするには
use std::ffi::CStr; use std::os::raw::c_char; pub fn foo(title: &str) -> () { // } pub extern fn named_window(title: *mut c_char) -> () { let slice = unsafe {CStr::from_ptr(title)}; foo(slice.to_str().unwrap()); }
- Rustで
const char*
は*mut c_char
CStr::from_ptr
で共有ライブラリに渡されたconst char*からスライスを作成- 作成したスライスを
to_str
でResult型を取得してその中から&strが取り出せる。