emscripten、 WebAssembly,傳遞字串給c函式
阿新 • • 發佈:2019-01-12
下面看具體的例項。
下面的程式碼是一個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.2)Hello World!
WebAssembly程式設計實踐(1.1)安裝Emscripten
歡迎關注玄說前端公眾號
QQ群:850038125