首页 > 其他分享 >WebAssembly01--c代码调用js

WebAssembly01--c代码调用js

时间:2022-10-12 09:35:30浏览次数:74  
标签:EM -- len js int API WebAssembly01 PORT

编译选项

 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

标签:EM,--,len,js,int,API,WebAssembly01,PORT
From: https://www.cnblogs.com/simp/p/16783367.html

相关文章

  • Java 手动显示调用validate的实体属性验证
    importorg.springframework.util.CollectionUtils;importjavax.validation.ConstraintViolation;importjavax.validation.Valid;importjavax.validation.Validati......
  • Java自学小白——IO流
    一、文件基础知识Java对文件的操作是通过IO流来实现的,想要了解IO流,就得先学习Java的File类                    I/O......
  • Java小白学习笔记——反射
    快速入门一,反射概述反射机制       上述程序的返回值  反射获取对象 方式一在编译阶段使用,一般多在通过读取配置文件获取方式二在加载......
  • 多表查询-概述和多表查询-内连接
    多表查询-概述查询语法:select列名列表from表名列表where....准备sql 笛尔卡积:有两个集合A,B去这两个集合的所有组成情况。要完成多表查询,需要消......
  • 隐私合规综合实践
    隐私合规综合实践目录介绍01.整体概述介绍1.1遇到问题说明1.2项目背景1.3设计目标1.4产生收益分析02.隐私合规测什么2.1隐私合规是什么2.2为何做隐私......
  • <三>从编译器角度理解C++代码编译和链接原理
    1代码点击查看代码**sum.cpp**intgdata=10;intsum(inta,intb){returna+b;}**main.cpp**externintgdata;intsum(int,int);intdata=20;intmain......
  • 即用型UI组件库Kendo UI R3 2022,让应用主题开发更容易
    KendoUI是带有 jQuery、Angular、React和Vue库的JavaScriptUI组件的最终集合,无论选择哪种JavaScript框架,都可以快速构建高性能响应式Web应用程序。通过可自定义的UI组件......
  • C++智能指针
    C++提供了四个智能指针模版类,分别为:auto_ptr,unique_ptr,shared_ptr与weak_ptr(其中auto_ptr为C++98提供的解决方案,在C++11中已废除,并提供另外三种)。这三者均定义了类似指......
  • 【已解决】Navicat 进入 MySQL 提示错误:Table 'performance_schema.session_variables
    一、问题原因二、试错以为是MySQL服务启动有问题,重新启动了下服务,仍然没有解决。三、解决找到MySQL安装目录,进入bin文件夹下,在bin文件夹下运行命令行窗口,输入以下命令......
  • maxcomputeSQL工作流程
    MaxCompute向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全提交一个SQL语句,发送REST......