non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

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年前の記事