下面看具體的實例。前端
下面的代碼是一個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
WebAssembly編程實踐(1.2)Hello World!
WebAssembly編程實踐(1.1)安裝Emscripten
歡迎關注玄說前端公衆號
QQ羣:850038125