0

の関数シグネチャを見るとjs_sys::Uint8Array::new_with_byte_offset_and_length

pub fn new_with_byte_offset_and_length(
    buffer: &JsValue,
    byte_offset: u32,
    length: u32
) -> Uint8Array

buffer現在の wasm インスタンスのメモリ バッファを参照する引数が必要です。

Rust 側からそのようなオブジェクトにアクセスするにはどうすればよいですか? (wasm にコンパイルされます)

4

1 に答える 1

3

現在の wasm インスタンスのメモリ バッファを参照する引数バッファが必要です。

まず、これは必ずしも真実ではないことに注意してください。そのバインディングは、標準の JavaScript API 用Uint8Arrayです。これにより、任意のバッファまたは容量からバイト配列を作成できます。

バイト配列ビューを Rust メモリに渡したい、またはwasm-bindgenRustメモリ内のバイトを JavaScript に返したいだけの場合、このコンストラクターは実際には必要ありません。錆コード。&[u8]Vec<u8>

ただし、念のため、質問の2番目の部分に答えるには

Rust 側からそのようなオブジェクトにアクセスするにはどうすればよいですか? (wasm にコンパイルされます)

Rust 側からはwasm_bindgen::memory、メモリ インスタンスを提供する を使用できます。デフォルトでは、ジェネリックとして返されますが、それをusingにJsValueキャストできます。これにより、必要に応じてプロパティにアクセスできるようになります。WebAssembly.Memory.unchecked_into::<js_sys::WebAssembly::Memory>()buffer

そのようなRustメモリへの短命のUint8Arrayビューの作成は、組み込み API にも実装されていますが、正当な理由でjs_sys::Uint8Array::viewマークされていることに注意してください。多くの組み込みAPIが呼び出す割り当てで無効になる可能性があるため、このようなビューは非常に慎重に処理し、作成後すぐに使用するようにしてください。問題を回避する最善の方法は、このような低レベルのアクセスにまったく依存せず、代わりにバインディングを生成するために使用することです。unsafebuffer#[wasm_bindgen]

于 2020-02-28T03:03:44.117 に答える