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
相關文章
- WebAssembly和Emscripten工作整理Web
- 傳遞函式函式
- go 陣列傳遞給函式三種方式Go陣列函式
- swift 函式傳遞Swift函式
- javascript如何給事件處理函式傳遞引數JavaScript事件函式
- js如何給事件繫結的函式傳遞引數JS事件函式
- 【C語言】函式的概念和函式的呼叫(引數傳遞)C語言函式
- c++ 執行緒函式傳遞資料 namespaceC++執行緒函式namespace
- Vue 中,如何將函式作為 props 傳遞給元件Vue函式元件
- arguments物件獲取給函式傳遞的實際引數物件函式
- 如何給js的onclick事件處理函式傳遞引數JS事件函式
- 將函式傳給webworker函式Web
- JavaScript函式傳遞引數JavaScript函式
- 函式的引數傳遞函式
- JavaScript函式引數傳遞JavaScript函式
- js中函式引數值傳遞和引用傳遞JS函式
- js如何給繫結的事件處理函式傳遞引數JS事件函式
- 函式作為引數傳遞函式
- 函式引數傳遞及返回函式
- 傳遞指標引數(函式內部給指標賦值)示例指標函式賦值
- Golang中函式傳參存在引用傳遞嗎?Golang函式
- python函式之引數傳遞Python函式
- C#語言函式遞迴C#函式遞迴
- c++ 執行緒函式傳遞資料 物件和變數C++執行緒函式物件變數
- C語言kill()函式:傳送訊號給指定的程式C語言函式
- js函式引數值傳遞和引用傳遞簡單介紹JS函式
- Python的函式引數傳遞:傳值?引用?Python函式
- C語言之字串處理函式C語言字串函式
- C語言 將函式(有參、無參)作為引數傳遞C語言函式
- c++單例模式、常量成員函式、引數傳遞、友元C++單例模式函式
- C語言函式傳遞指標引數的問題詳解C語言函式指標
- C語言結構體及函式傳遞陣列引數示例C語言結構體函式陣列
- python中函式的引數傳遞Python函式
- php函式引用傳遞引數的方法PHP函式
- String型別函式傳遞問題型別函式
- JavaScript 事件處理函式傳遞引數JavaScript事件函式
- onclick事件處理函式傳遞引數事件函式
- LTSPICE 公式法畫傳遞函式舉例公式函式