WebAssembly ツアー 目次

関数を呼び出す

後で動的な関数を実行するためには、関数ハンドルとその引数を受け取るための呼び出し方が必要になります。

繰り返しですが、JavaScriptとWebAssemblyは数値だけをやり取りし、JavaScriptの数値は64ビットの浮動小数点です。

関数は最終的にこのようになります。

js_invoke_with_2_params(fn_handle: f64, a: f64, b: f64) -> f64

全てを組み合わせるとこうです。

let log_handle = register_function("
  (param_a, param_b) => {
    // ここでどうにかして console.log を呼び出す
  }");


let msg = "hello world";

js_invoke_with_2_params(
  log_handle,
  msg.as_ptr() as f64,
  msg.len() as f64
);

しかしまだこのJavaScriptの関数には問題があることに気付いたでしょう。 メモリではなく、UTF-8文字列の開始位置と終了位置が渡されています!