non vorrei lavorare

2020年度からの小学校プログラミング教育の必修化を親として迎えるブロガーの書く、子供との日常

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が取り出せる。

参考資料

doc.rust-lang.org

関連記事

14年前の記事

7年前の記事

5年前の記事