相关文章推荐
坚韧的甜瓜  ·  傅艺伟:离婚两度痛失爱子,前半生恣意任性,后 ...·  1 年前    · 
爽快的石榴  ·  3条非常实用的处世“潜规则”,受益终生-CS ...·  1 年前    · 
幸福的番茄  ·  郑州市惠济一中举行第十四届班主任节|学校|新 ...·  1 年前    · 
飞奔的灯泡  ·  金口_百度百科·  1 年前    · 
想旅行的野马  ·  high爆周末!渝北这两大游乐园,有你想不到 ...·  2 年前    · 
Code  ›  WebAssembly之使用JS调用C/C++接口开发者社区
js c++ js代码 webassembly
https://cloud.tencent.com/developer/article/1695216
彷徨的骆驼
2 年前
作者头像
李小白是一只喵
0 篇文章

WebAssembly之使用JS调用C/C++接口

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 算法微时光 > WebAssembly之使用JS调用C/C++接口

WebAssembly之使用JS调用C/C++接口

作者头像
李小白是一只喵
发布 于 2020-09-10 15:08:45
2.7K 0
发布 于 2020-09-10 15:08:45
举报

image.png

如果想在C/C++代码中定义一个需要从JavaScript调用的函数,可以使用Emscripten 的ccall()函数并使用EMSCRIPTEN_KEEPALIVE声明(它将添加函数到导出函数列表)来完成。

代码创建

创建一个test.c文件:

#include <stdio.h>
#include <emscripten/emscripten.h>
int main(int argc, char ** argv)
    printf("Hello World\n");
#ifdef __cplusplus
extern "C"
#endif
void EMSCRIPTEN_KEEPALIVE add(int a, int b)
    printf("a+b=%d\n", a+b);
#ifdef __cplusplus
#endif

默认情况下,Emscripten生成的代码总是只调用该main()函数,其他函数作为死代码被删除。

将EMSCRIPTEN_KEEPALIVE放在函数名称之前可以阻止这种情况发生。 还需要导入emscripten.h库来使用EMSCRIPTEN_KEEPALIVE。

添加模板文件HTML

在上一级新建html_template目录,并将shell_minimal.html复制到目录中。

其余步骤和上一章节相同。

运行实例

执行编译:

 emcc -o test.html test.c -O3 -s WASM=1 --shell-file ../html_template/shell_minimal.html -s NO_EXIT_RUNTIME=1  -s "EXTRA_EXPORTED_RUNTIME_METHODS=['ccall']"

编译成功后执:

 emrun --no_browser --port 8080 .

image.png

在浏览器中执行:http://127.0.0.1:8080/ 进入test.html:

image.png

但是并没有调用我们的函数,下面就要修改html文件调用我们的函数。

在html文件中添加按钮和对应的回调函数:

<button class="mybutton">Run myFunction</button>
document.querySelector('.mybutton')
    .addEventListener('click', function(){
        alert('check console');
        var result = Module.ccall(
            'add',
 
推荐文章
坚韧的甜瓜  ·  傅艺伟:离婚两度痛失爱子,前半生恣意任性,后半生孤独悲凉_腾讯新闻
1 年前
爽快的石榴  ·  3条非常实用的处世“潜规则”,受益终生-CSDN博客
1 年前
幸福的番茄  ·  郑州市惠济一中举行第十四届班主任节|学校|新学期|区教育局_网易订阅
1 年前
飞奔的灯泡  ·  金口_百度百科
1 年前
想旅行的野马  ·  high爆周末!渝北这两大游乐园,有你想不到的惊喜!
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号