1. 程式人生 > 實用技巧 >WebAssembly 匯出c結構體 js獲取 補充篇

WebAssembly 匯出c結構體 js獲取 補充篇

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]); })

結果輸出: