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
然後在頁面中引用:
<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
相關文章
- 傳遞函式函式
- go 陣列傳遞給函式三種方式Go陣列函式
- swift 函式傳遞Swift函式
- 【C語言】函式的概念和函式的呼叫(引數傳遞)C語言函式
- Vue 中,如何將函式作為 props 傳遞給元件Vue函式元件
- c++ 執行緒函式傳遞資料 namespaceC++執行緒函式namespace
- JavaScript函式傳遞引數JavaScript函式
- 函式的引數傳遞函式
- 函式作為引數傳遞函式
- 函式引數傳遞及返回函式
- 傳遞指標引數(函式內部給指標賦值)示例指標函式賦值
- C#語言函式遞迴C#函式遞迴
- Golang中函式傳參存在引用傳遞嗎?Golang函式
- Python的函式引數傳遞:傳值?引用?Python函式
- c++ 執行緒函式傳遞資料 物件和變數C++執行緒函式物件變數
- python中函式的引數傳遞Python函式
- String型別函式傳遞問題型別函式
- C語言之字串處理函式C語言字串函式
- C語言 將函式(有參、無參)作為引數傳遞C語言函式
- C語言函式傳遞指標引數的問題詳解C語言函式指標
- c++單例模式、常量成員函式、引數傳遞、友元C++單例模式函式
- 給妹子講python-S01E20函式引數的傳遞與修改Python函式
- Python語法—函式及引數傳遞Python函式
- LTSPICE 公式法畫傳遞函式舉例公式函式
- php函式引用傳遞引數的方法PHP函式
- C++分割字串,及strtok函式使用C++字串函式
- c++字串查詢函式實現C++字串函式
- 使用emscripten實現js直接呼叫C程式碼(emscripten的初探)JSC程式
- JavaScript為事件處理函式傳遞引數JavaScript事件函式
- C學習--自定義字串連線函式字串函式
- 遞迴函式遞迴函式
- c++指標傳遞與引用傳遞C++指標
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- 函式表示式–遞迴函式遞迴
- 『無為則無心』Python函式 — 26、Python函式引數的傳遞方式Python函式
- Oracle 字串函式Oracle字串函式
- Oracle 字串函式Oracle字串函式
- 字串函式 metaphone ()字串函式