dll调用nodejs的回调函数

news2024/9/26 5:14:20

nodejs使用ffi调用dll。dll中有回调函数调用js中的方法。

c语言中cdll.h文件

extern "C" {
	typedef void(*JsCall)(int index); //这个就是要传入的类型结构
	extern __declspec(dllimport) int Add(int a, int b);
	extern __declspec(dllexport) void CallBackTest(JsCall callback);//js中调用此方法将js的回调函数传进来

	extern __declspec(dllimport) void CallAdd();
}

c语言中cdll.cpp文件

#include "cdll.h"
#include <stdio.h>

int Add(int a, int b)
{
	printf("add");
	return a + b;
}

void CallBackTest(JsCall callback)
{
	for (int i = 0; i < 10; i++)
	{
		callback(i);//调用js中自己写好的JsCall方法
	}
}

js中调用dll

const ffi = require("ffi-napi");

const cdll = ffi.Library("cdll.dll", {
    "Add": ["int", ["int","int"]],
    "CallBackTest":["void",["pointer"]]
});
console.log(cdll.Add(1,5));
//回调函数,dll来调用此方法
function JsCall(index){
    console.log(index);
}

const ref = require('ref-napi');
const SDKCallBack = ffi.Callback(ref.types.void,['int'],JsCall);//把JsCall方法变成一个指针,用于后续传输dll使用。第一个参数是js方法的返回值,第二个参数的js方法的入参,第三个参数是js回调方法名
cdll.CallBackTest(SDKCallBack);//把js方法指针传入dll的CallBackTest方法

 运行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/889722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【内网穿透】如何实现在外web浏览器远程访问jupyter notebook服务器

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook&#xff0c;它是一个交互式的数据科学和计算环境&#xff0c;支持多种编程语言&#xff0c;如…

Python系统学习1-9-类一之类语法

一、类之初印象 1、类就是空表格&#xff0c;将变量&#xff08;列名&#xff09;和函数&#xff08;行为&#xff09;结合起来 2、创建对象&#xff0c;表达具体行 3、创建类就是创建数据的模板 --操作数据时有提示 --还能再组合数据的行为 --结构更加清晰 4、类的内存分配…

为什么我建议机械专业的同学转行嵌入式

最近&#xff0c;我身边有不少机械专业找我&#xff0c;他们对未来的就业形势相当苦恼&#xff0c;觉得自己之后只能进厂打螺丝了。但是我跟他们说&#xff0c;在这个选择比努力重要的时代&#xff0c;只要入对行&#xff0c;谁都可以一飞冲天。 对于学机械的同学&#xff0c;…

mysql 8.0安装

操作系统&#xff1a;22.04.1-Ubuntu apt 安装命令 sudo apt install mysql-client-core-8.0 sudo apt install mysql-server-8.0终端输入 mysql 可以直接免密登录 如果此时提示需要密码&#xff0c;则可以进入配置文件&#xff0c;设置免密登录 sudo vim /etc/mysql/mysq…

Python爬虫性能优化:多进程协程提速实践指南

目录 1. 多进程爬虫的实现&#xff1a; 1.1 将爬虫任务划分成多个子任务&#xff1a; 1.2 创建进程池&#xff1a; 1.3 执行任务&#xff1a; 1.4 处理结果&#xff1a; 代码示例 2. 协程爬虫的实现&#xff1a; 2.1 定义异步爬虫函数&#xff1a; 2.2 创建事件循环&a…

小程序分包流程

目录 问题&#xff1a;小程序为什么要分包&#xff1f; 一、常见的分包形式 二、常规分包 概念&#xff1a; 1.操作位置 2.特点 3.分包使用 1.主包结构不变&#xff0c;但是要把分包过的页面移除 2.分几个包就声明几个 3.主结构展示 注意&#xff1a;分包之后当进行页…

GD32F207 位带操作 GPIO

下面的程序用在GD32F207上测试成功&#xff0c; 如果要在新的单片机上进行位带操作需要查看新的单片机的寄存器偏移量。 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)0x2000000((addr &0xFFFFF)<<5)(bitnum<<2)) #define MEM_ADDR(addr) *((vol…

安防监控/视频集中存储/云存储平台EasyCVR v3.3增加首页告警类型

安防监控/视频集中存储/云存储EasyCVR视频汇聚平台&#xff0c;可支持海量视频的轻量化接入与汇聚管理。平台能提供视频存储磁盘阵列、视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联、H.265自动转码等…

基于Lin协议的UDS调度表

参考ISO 17987-2. 有两种调度模式&#xff1a; diagnostics only mode 没什么好说的&#xff0c;不存在普通应用报文。 interleaved diagnostics mode&#xff1a; 需要UDS请求时&#xff0c;等待当前normal communication schedule table执行完成&#xff0c;开始执行dia…

chromedriver.exe 的所有版本下载地址

Chrome for Testing availability 上面的网址是V115 v116.... 以上的。 CNPM Binaries Mirror 上面这个是V115版本以下的。 这个文章没有任何实际价值&#xff0c;记录的原因是因为突然发现过去的py无法运行&#xff0c;原因是chrome浏览器偷偷升级到V115&#xff0c;于是找…

Vue2中根据权限添加动态路由

Vue2中根据权限添加动态路由 大概记录一下主要代码 1.根据后端返回的路由列表生成左侧菜单&#xff08;后端返回的数据结构中用id和pid来区别包含关系&#xff09; 大概结构如下&#xff1a; 2.前端需要处理成包含children的树形结构 //动态生成菜单 export const gener…

Radek‘s notebook

VGGImagenette预训练迁移学习&#xff0c;6个训练样本 kaggle的dogs vs cats数据集&#xff1a; 博客&#xff1a;https://medium.com/radekosmulski/can-we-beat-the-state-of-the-art-from-2013-with-only-0-046-of-training-examples-yes-we-can-18be24b8615f 代码&#x…

MQTT协议-EMQX技术文档-spring-boot整合使用--发送接收-消费

概念先行&#xff1a; mqtt与mq的关系 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种基于发布/订阅模式的通信协议&#xff0c;它与MQ&#xff08;Message Queue&#xff0c;消息队列&#xff09;有一定的关联&#xff0c;但二者并不完全相同。 M…

空气IT

现代社会中&#xff0c;空气质量成为了人们关注的焦点之一。随着工业化的发展&#xff0c;汽车尾气、工厂排放和燃煤等行为导致城市空气污染日益严重&#xff0c;给人们的健康和生活质量带来了极大的威胁。 首先&#xff0c;空气污染对人体健康造成了严重的危害。空气中的颗粒…

费米问题:如何估算?

解答费米问题有两个重要的思想&#xff1a; 第一个是“逻辑树法”&#xff1a; 用逻辑拆解把一个大的问题拆分为几个小问题&#xff0c;大问题是未知的&#xff0c;而拆解后的小问题是可以通过经验和逻辑推算得出的。最后再把得到解答的小问题反推到大问题上&#xff0c;用已…

HTML基础 知识点总结

从这篇笔记开始总结看过的《从0到1 HTMLCSSJavaScript》书籍笔记&#xff0c;记录HTML以及CSS的相关知识点&#xff0c;为之后从事相关工作打好基础 简单介绍 基本标签文本列表表格 一.简单介绍 HTML&#xff1a;超文本标记语言&#xff0c;HTML是一门描述性的标记语言CSS&a…

Visual Components 专业版功能介绍 衡祖仿真

Visual Components专业版Professional 版本包括Visual Components精华版Essentials 中所有的功能&#xff0c;并提供您用于建模和创建自己的组件的工具。 Visual Components专业版功能 1、GEOMETRY SIMPLIFICATION 几何体简化 通过简化和删除&#xff08;CAD&#xff09;模型…

如何快速的合并多个PPT使之成为一个PPT?

如何快速的合并多个PPT使之成为一个PPT&#xff1f; 项目过程中&#xff0c;经常给客户汇报&#xff0c;经常做PPT&#xff0c;有时候&#xff0c;需要把之前的ppt内容整合到新的内容中&#xff0c;如何快速合并以及使用呢&#xff1f; 幻灯片&#xff08;PPT中&#xff09;点…

微信开发之一键撤回消息的技术实现

撤回消息 请求URL&#xff1a; http://域名地址/revokeMsg 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wId是string登录实例标识wcId…

excel统计函数篇2之count系列

1、COUNT(value1,[value2],…):计算参数列表中数字的个数 2、COUNTA(value1,[value2],…)&#xff1a;计算参数列表中值的个数 联想在excel之数学函数、excel中的通配符一文中提到求和函数&#xff1a; SUMIF(range,ceriteria,[sum_range])&#xff1a;对范围内符合指定条件的…