首页 > Web开发 > 详细

WebAssembly 导出c结构体 js获取 补充篇

时间:2020-07-12 19:26:17      阅读:72      评论:0      收藏:0      [点我收藏+]

c代码:

  

#include<emscripten/emscripten.h>
#include<stdlib.h>

typedef struct 
{
   unsigned char * str;
   int a;
   double c;
}data;

data d = {(unsigned char *)"我是字符串",111,3.141592634571};

data* EMSCRIPTEN_KEEPALIVE getData(){
    return &d;
}

emscripten编译命令

emcc main.c -s WASM=1 -s MODULARIZE=1 -s EXTRA_EXPORTED_RUNTIME_METHODS=["UTF8ToString"]  -s EXPORT_NAME="WasmModule" -s ENVIRONMENT=web -o index.js

js调用代码

   WasmModule().then(mod => {
              //sPtr 是结构体的指针
            let sPtr = mod._getData();
          
            //mod.HEAP32[sPtr >> 2] 取到字符串的地址
            //mod.UTF8ToString 把c串地址转化为js字符串
            console.log(mod.UTF8ToString(mod.HEAP32[sPtr >> 2]));
            //HEAP32代表int类型占四字节 所以下面需要加4 并且取到int类型的值
            console.log(mod.HEAP32[sPtr + 4 >> 2]);
            //mod.HEAPF64 代表double类型 取结构体第三个数据 地址需要加上第一个与第二个值得字节数所以加8
            console.log(mod.HEAPF64[sPtr + 8 >> 3]);

        })

结果输出:

技术分享图片

 

WebAssembly 导出c结构体 js获取 补充篇

原文:https://www.cnblogs.com/y-y-y-y/p/13289343.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!