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
複製代碼

而後在頁面中引用:bash

<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 方法開闢內存空間存儲數據,返回指針。ui

 var retPtr = Module._outName(ptr);
複製代碼

調用C導出函數,傳入字符串指針。spa

 var resValue = Pointer_stringify(retPtr);
複製代碼

調用Pointer_stringify膠水函數,將c返回的指針轉換爲字符串。3d

   _free(ptr);
複製代碼

釋放內存。指針

下面查看下運行結果:code

image

WebAssembly編程實踐(1.4)膠水代碼初探

WebAssembly編程實踐(1.3)膠水代碼初探

WebAssembly編程實踐(1.2)Hello World!

WebAssembly編程實踐(1.1)安裝Emscripten

歡迎關注玄說前端公衆號

image

QQ羣:850038125

相關文章
相關標籤/搜索