Вы должны сделать то же самое, что и связанный вопрос, но в обратном порядке. Вам нужно будет выбрать кодировку (например, UTF-8 или UTF-16), поместить эти закодированные данные в буфер, решить, как передать этот указатель и длину через границу, а затем «просто сделать это».
я есть эта простая функция Rust:
#[no_mangle]
pub fn compute(operator: &str, n1: i32, n2: i32) -> i32 {
match operator {
"SUM" => n1 + n2,
"DIFF" => n1 - n2,
"MULT" => n1 * n2,
"DIV" => n1 / n2,
_ => 0
}
}
Я успешно компилирую это в WebAssembly, но не могу передатьoperator
параметр от JS до Rust.
Строка JS, которая вызывает функцию Rust, выглядит следующим образом:
instance.exports.compute(operator, n1, n2);
operator
это JSString
а такжеn1
, n2
являются JSNumber
s.
n1
а такжеn2
передаются правильно и могут быть прочитаны внутри скомпилированной функции, поэтому я думаю, проблема в том, как я передаю строку. Я предполагаю, что он передается как указатель от JS на WebAssembly, но не может найти доказательства или материал о том, как это работает.
Я не использую Emscripten и хотел бы оставить его автономным (цель компиляцииwasm32-unknown-unknown
), но я вижу, что они упаковывают свои скомпилированные функции вModule.cwrap
Может быть, это могло бы помочь?