Веб-сборка от Javascript - PullRequest
       12

Веб-сборка от Javascript

0 голосов
/ 27 октября 2019

У меня есть программа на C ++ с 1000+ строками (используя vector и stdlib.h). Программа состоит из одной функции, которая принимает пять unsigned int (или 1 unsigned char и 4 unsigned int) в качестве ввода, возвращая строку или 4 unsigned int (я не понимаю, как вернуть массив чисел, поэтому я использую строку). Я скомпилировал программу с использованием WasmExplorer в файл .wasm.

Как вызвать функцию из файла .wasm из javascript, получив результат? Я попытался:

let squarer;

function loadWebAssembly (fileName) {
  return fetch (fileName)
    .then (response => response.arrayBuffer ())
    .then (bits => WebAssembly.compile (bits))
    .then (module => {return new WebAssembly.Instance (module)});
};
  
loadWebAssembly ('http://test.ru/squarer.wasm')
  .then (instance => {
    squarer = instance.exports._Z7squareri;
    console.log ('Finished compiling! Ready when you are ...');
  });

Ошибка в Chrome (у меня есть файл .wasm 29 КБ)

Uncaught (in promise) RangeError: WebAssembly.Instance is disallowed on the main thread, if the buffer size is larger than 4KB. Use WebAssembly.instantiate.

Как вызвать функцию из JS (с примером)?

Специальная функция в wasm / wasm-000197c6 / wasm-000197c6-22 в Chrome

1 Ответ

0 голосов
/ 30 октября 2019

Проблема и решение четко указаны в сообщении об ошибке: вместо конструктора WebAssembly.Instance() следует использовать функцию WebAssembly.instantiate().

...