emscripten、 WebAssembly,传递字符串给c函数

下面看具体的实例。

下面的代码是一个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);
复制代码

释放内存。

下面查看下运行结果:

WebAssembly编程实践(1.4)胶水代码初探

WebAssembly编程实践(1.3)胶水代码初探

WebAssembly编程实践(1.2)Hello World!

WebAssembly编程实践(1.1)安装Emscripten

欢迎关注玄说前端公众号

QQ群:850038125

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值