Не задается строка через webassembly

Рейтинг: 0Ответов: 1Опубликовано: 08.05.2023

Есть код на js, и c++ который компилится в wasm. дальше я передаю в функцию указатель на конкретную область памяти (2000) куда мне wasm должен записать значение строки. но в результате эта область памяти равна нулю, т.е. такое впечатление что не записывается.

let moduleMemory = null
let tableMemory = null

let moduleExports = null
let bytes = null

function initializePage() {
  moduleMemory = new WebAssembly.Memory({
    initial: 1,
    maximum: 1,
  })

  tableMemory = new WebAssembly.Table({
    initial: 0,
    maximum: 0,
    element: 'anyfunc',
  })

  const importObject = {
    env: {
      __memory_base: 0,
      __table_base: 0,
      memory: moduleMemory,
      table: tableMemory,
    },
    wasi_snapshot_preview1: {
      proc_exit: () => {},
    },
  }

  WebAssembly.instantiateStreaming(fetch('./validate.wasm'), importObject).then((result) => {
    moduleExports = result.instance.exports
    bytes = new Uint8Array(moduleMemory.buffer)

    const res = moduleExports.setName(2000)

    console.log(res)
    console.log(bytes)
  })
}

код на c++:

#ifdef __EMSCRIPTEN__
  #include <emscripten.h>
#endif

#ifdef __cplusplus
extern "C" {
#endif

#ifdef __EMSCRIPTEN__
  EMSCRIPTEN_KEEPALIVE
#endif
int setName(char* return_name) {
  *return_name = 'a';
  return_name++;
  *return_name = 'b';
  return_name++;
  *return_name = 'c';

  return 0;
}

#ifdef __cplusplus
}
#endif

int main() {
  return 0;
}

пробовал запускать в vs studio вот так, как консольное cpp приложение, работает:

int main() {
    char res[255] = "";

    setName(res);
    printf("print: %s", res);
    return 0;
}

не подскажите почему в консольном приложении записывает строку, а в wasm нет?

Ответы

Ответов пока нет.