Не задается строка через webassembly
Есть код на 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 нет?
Источник: Stack Overflow на русском