gpt4 book ai didi

javascript - 如何将字符串传递给使用 emscripten 为 WebAssembly 编译的 C 代码

转载 作者:行者123 更新时间:2023-12-03 16:26:41 25 4
gpt4 key购买 nike

我一直在寻找 WebAssembly 网站和教程,感觉有点失落。

我有以下 C 代码:

void EMSCRIPTEN_KEEPALIVE hello(char * value){
printf("%s\n", value);
}

我用(我也不确定这部分是最好的方法)编译它:
emcc demo.c -s WASM=1 -s NO_EXIT_RUNTIME=1 -o demo.js

据我了解,我现在可以在我的 javascript 类中使用 demo.js 胶水代码并以这种方式调用该方法:
...
<script src="demo.js"></script>
<script>
function hello(){
// Get the value
var value = document.getElementById("sample");
_hello(value.innerHTML);
}
</script>
...

当我调用该方法时,我在控制台中看到的打印内容是:
(null)

我是否缺少将字符串值传递给使用 WebAssembly 编译的 C 代码的东西?

非常感谢

最佳答案

我实际上找到了我的问题的答案。我只需要使用 Emscripten 在将 C++ 代码构建到 WASM 时也生成的“Glue”代码中自动构建的函数。

因此,基本上,要将字符串传递给使用 Emscripten 编译为 WebAssembly 的 C++ 代码,您只需这样做:

// Create a pointer using the 'Glue' method and the String value
var ptr = allocate(intArrayFromString(myStrValue), 'i8', ALLOC_NORMAL);

// Call the method passing the pointer
val retPtr = _hello(ptr);

// Retransform back your pointer to string using 'Glue' method
var resValue = Pointer_stringify(retPtr);

// Free the memory allocated by 'allocate'
_free(ptr);

更多完整信息请访问 Emscripten's page .

关于javascript - 如何将字符串传递给使用 emscripten 为 WebAssembly 编译的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46815205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com