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>

上面的代码咱们核心部分逐行分析一下:3d

  var ptr = allocate(intArrayFromString("玄魂"),   'i8', ALLOC_NORMAL);

上面的intArrayFromString方法,将字符串转换为UTF8的char数组,而后allocate 方法开辟内存空间存储数据,返回指针。指针

 var retPtr = Module._outName(ptr);

调用C导出函数,传入字符串指针。code

 var resValue = Pointer_stringify(retPtr);

调用Pointer_stringify胶水函数,将c返回的指针转换为字符串。blog

   _free(ptr);

释放内存。ip

下面查看下运行结果:内存

image

WebAssembly编程实践(1.4)胶水代码初探

WebAssembly编程实践(1.3)胶水代码初探

WebAssembly编程实践(1.2)Hello World!

WebAssembly编程实践(1.1)安装Emscripten

欢迎关注玄说前端公众号

image

QQ群:850038125

相关文章
相关标签/搜索