Вы должны сделать то же самое, что и связанный вопрос, но в обратном порядке. Вам нужно будет выбрать кодировку (например, 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 являются JSNumbers.

n1 а такжеn2 передаются правильно и могут быть прочитаны внутри скомпилированной функции, поэтому я думаю, проблема в том, как я передаю строку. Я предполагаю, что он передается как указатель от JS на WebAssembly, но не может найти доказательства или материал о том, как это работает.

Я не использую Emscripten и хотел бы оставить его автономным (цель компиляцииwasm32-unknown-unknown), но я вижу, что они упаковывают свои скомпилированные функции вModule.cwrapМожет быть, это могло бы помочь?

Ответы на вопрос(0)

Ваш ответ на вопрос