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);

釋放內存。

下面查看下運行結果:

image

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

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

WebAssembly編程實踐(1.2)Hello World!

WebAssembly編程實踐(1.1)安裝Emscripten

歡迎關注玄說前端公眾號

image

QQ群:850038125


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM