WebAssembly导出的函数怎么传字符串给JS?
我用Rust编译了一个.wasm模块,里面有个函数想返回一个字符串给JavaScript,但发现直接return字符串会报错。查了文档说要通过内存传递,但具体怎么操作完全懵了。
我试过在Rust里用std::ffi::CString,然后导出指针,但在JS里用UTF8ToString()读取时总是乱码或者崩溃。是不是哪里没对齐?下面是我的Rust和JS代码:
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn get_message() -> *const u8 {
let msg = b"Hello from WASM!";
msg.as_ptr()
}
JS这边是这么调的:
import { get_message } from './pkg/my_wasm.js';
const ptr = get_message();
const str = UTF8ToString(ptr);
console.log(str); // 输出乱码或者直接报错
wasm-bindgen,那就别自己手动去摆弄指针了,这玩意儿坑多水深,容易掉进内存管理的陷阱里。你现在的代码里,b"..."只是个静态字面量切片,没有在堆上分配,而且后面也没加