下面看具体的实例。前端
下面的代码是一个C函数,实现简单的字符串拼接,而后返回拼接的字符串。编程
#include <stdio.h>
#include <string>
char* EMSCRIPTEN_KEEPALIVE outName(char *n){
char xhName[] = "xuanhun";
strcat(n, xhName);
return n;
}
复制代码
下面使用命令进行编译:数组
emcc hello.cc -o test2.js
复制代码
而后在页面中引用:bash
<script>
Module = {};
Module.onRuntimeInitialized = function () {
var ptr = allocate(intArrayFromString("玄魂"), 'i8', ALLOC_NORMAL);
var retPtr = Module._outName(ptr);
var resValue = Pointer_stringify(retPtr);
console.log(resValue);
_free(ptr);
}
</script>
<script src="test2.js"></script>
复制代码
上面的代码咱们核心部分逐行分析一下:函数
var ptr = allocate(intArrayFromString("玄魂"), 'i8', ALLOC_NORMAL);
复制代码
上面的intArrayFromString方法,将字符串转换为UTF8的char数组,而后allocate 方法开辟内存空间存储数据,返回指针。ui
var retPtr = Module._outName(ptr);
复制代码
调用C导出函数,传入字符串指针。spa
var resValue = Pointer_stringify(retPtr);
复制代码
调用Pointer_stringify胶水函数,将c返回的指针转换为字符串。3d
_free(ptr);
复制代码
释放内存。指针
下面查看下运行结果:code
WebAssembly编程实践(1.2)Hello World!
WebAssembly编程实践(1.1)安装Emscripten
欢迎关注玄说前端公众号
QQ群:850038125