ElC*_*ine 2 javascript webassembly
我一直在寻找WebAssembly网站和教程,我觉得有点迷茫.
我有以下C代码:
void EMSCRIPTEN_KEEPALIVE hello(char * value){
printf("%s\n", value);
}
Run Code Online (Sandbox Code Playgroud)
我编译它(我也不确定这部分是最好的方法):
emcc demo.c -s WASM=1 -s NO_EXIT_RUNTIME=1 -o demo.js
Run Code Online (Sandbox Code Playgroud)
根据我的理解,我现在可以在我的javascript类中使用demo.js粘合代码并以这种方式调用方法:
...
<script src="demo.js"></script>
<script>
function hello(){
// Get the value
var value = document.getElementById("sample");
_hello(value.innerHTML);
}
</script>
...
Run Code Online (Sandbox Code Playgroud)
当我调用方法时,我看到在控制台中打印的内容是:
(null)
Run Code Online (Sandbox Code Playgroud)
有什么我缺少将字符串值传递给使用WebAssembly编译的C代码吗?
非常感谢
ElC*_*ine 10
我实际上找到了我的问题的答案.我只需使用Emscripten在"Glue"代码中自动构建的函数,这些代码也是在向WASM构建C++代码时生成的.
所以基本上,要将一个String传递给使用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);
Run Code Online (Sandbox Code Playgroud)
有关Emscripten页面的更完整信息.
| 归档时间: |
|
| 查看次数: |
2583 次 |
| 最近记录: |