WebAssembly01--c代码调用js

简介: WebAssembly01--c代码调用js

编译选项

emcc test.c --js-library pkg.js -o test.js

pkg.js

mergeInto(LibraryManager.library,{
js_add:function(a,b) {
console.log("js_add");
return a+b;
    },
js_console_log_int:function(param){
console.log("js_console_log_in:"+param);
    }
})

test.c

#ifndef EM_PORT_API
# if defined(__EMSCRIPTEN__)
#   include <emscripten.h>
#   if defined(__cplusplus)
#     define EM_PORT_API(rettype) extern "C" rettype EMSCRIPTEN_KEEPALIVE
#   else
#     define EM_PORT_API(rettype) rettype EMSCRIPTEN_KEEPALIVE
#   endif
# else
#   if defined(__cplusplus)
#     define EM_PORT_API(rettype) extern "C" rettype
#   else
#     define EM_PORT_API(rettype) rettype
#   endif
# endif
#endif
#include<stdio.h>
#include<emscripten.h>
#include<stdlib.h>
#include<string.h>
EM_PORT_API(int) js_add(int a,int b);
EM_PORT_API(void) js_console_log_int(int param);
EM_PORT_API(void) print_the_answer(){
  int i=js_add(21,21);
  js_console_log_int(i);
}
EM_PORT_API(char*) str_merge(char* str1,char* str2)
{
  int str1_len = 0;
  int str2_len = 0;
  int size = 0;
  char *buf = NULL;
  if(str1) str1_len = strlen(str1);
  if(str2) str2_len = strlen(str2);
  size = str1_len+str2_len;
  buf = (char*)malloc(size);
  memset(buf,0,size);
  if(str1_len>0)strncpy(buf,str1,str1_len);
  if(str2_len>0)strncpy(buf+str1_len,str2,str2_len);
  return buf;//return merge result
}
EM_PORT_API(int) add(int a,int b)
{
  return a+b;
}
int main(int argc,char** argv)
{
  return add(1,2);  
}
<html>
  <head>
    <title>test page</title>
  </head>
  <body>
    <script >
    Module={}
    Module.onRuntimeInitialized=function(){
      Module._print_the_answer();
    }
    </script>
    <script src="test.js"></script>
  </body>
</html>
emrun --no_browser --port 8000 test.html
目录
相关文章
|
3月前
|
JavaScript
短小精悍的js代码
【10月更文挑战第17天】
139 58
|
1月前
|
JavaScript 前端开发 测试技术
在 golang 中执行 javascript 代码的方案详解
本文介绍了在 Golang 中执行 JavaScript 代码的四种方法:使用 `otto` 和 `goja` 嵌入式 JavaScript 引擎、通过 `os/exec` 调用 Node.js 外部进程以及使用 WebView 嵌入浏览器。每种方法都有其适用场景,如嵌入简单脚本、运行复杂 Node.js 脚本或在桌面应用中显示 Web 内容。
83 15
在 golang 中执行 javascript 代码的方案详解
|
2月前
|
JavaScript
原生js炫酷随机抽奖中奖效果代码
原生js随机抽奖是一个炫酷的根据数据随机抽奖的代码,该网页可进行随机抽取一个数据,页面动画高科技、炫酷感觉的随机抽奖效果,简单好用,欢迎下载!
50 3
|
2月前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍了如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤。通过这些工具,可以显著提升编码效率和代码质量。
571 4
|
2月前
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
136 6
|
2月前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
2月前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码。通过安装和配置这些工具,可以确保代码风格一致,提高代码质量和可读性。
246 1
|
3月前
|
JavaScript 前端开发 开发者
如何在 VSCode 中使用 ESLint 和 Prettier 检查并自动格式化 Vue.js 代码,提升团队协作效率和代码质量。
【10月更文挑战第9天】随着前端开发技术的发展,代码规范和格式化工具变得至关重要。本文介绍如何在 VSCode 中使用 ESLint 和 Prettier 检查并自动格式化 Vue.js 代码,提升团队协作效率和代码质量。通过安装插件、配置 ESLint 和 Prettier,以及设置 VSCode,实现代码实时检查和格式化,确保代码风格一致。
542 2
|
3月前
|
自然语言处理 JavaScript 前端开发
深入理解JavaScript中的闭包:原理、应用与代码演示
【10月更文挑战第12天】深入理解JavaScript中的闭包:原理、应用与代码演示