参考地址 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);
释放内存。
下面查看下运行结果: