参考地址 emscripten、 WebAssembly,传递字符串给c函数
可以用这个方法来实现 wasm AES加密
也可以参考现成的库,来改成自己需要的方法。 aes-wasm
下面看具体的实例。
下面的代码是一个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
然后在页面中引用:
<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 方法开辟内存空间存储数据,返回指针。
var retPtr = Module._outName(ptr);
调用C导出函数,传入字符串指针。
var resValue = Pointer_stringify(retPtr);
调用Pointer_stringify胶水函数,将c返回的指针转换为字符串。
_free(ptr);
释放内存。
下面查看下运行结果:
