emscripten、 WebAssembly,传递字符串给c函数

887

下面看具体的实例。

下面的代码是一个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