当前位置: 首页 > news >正文

dll调用nodejs的回调函数

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.lryc.cn/news/128368.html

相关文章:

  • 网络安全--linux下Nginx安装以及docker验证标签漏洞
  • 多维时序 | MATLAB实现WOA-CNN-BiGRU-Attention多变量时间序列预测
  • 金蝶软件实现Excel数据复制分录信息粘贴到单据体分录行中
  • 【Linux操作系统】深入探索Linux进程:创建、共享与管理
  • 【云原生、k8s】Calico网络策略
  • Unity3D 测试总结
  • 【无线点对点网络时延分析和可视化】模拟无线点对点网络中的延迟以及物理层和数据链路层之间的相互作用(Matlab代码实现)
  • 在思科(Cisco)路由器中使用 SNMP
  • 【压测】wg/wrk 轻量级压测
  • Redis可以用作消息队列吗?如何实现简单的消息队列功能?
  • [Java基础]对象转型
  • JVM——类文件结构
  • 银河麒麟服务器v10 sp1 .Net6.0 上传文件错误
  • C#实现普通的语音播报
  • django中实现事务的几种方式
  • 【es6】具名组匹配
  • 自然语言处理技术:NLP句法解析树与可视化方法
  • flinksql报错 Cannot determine simple type name “org“
  • e.target.value和 binding.value 区别
  • 软链接与exec进程替换运行路径问题
  • 【Go】锁相关
  • git环境超详细配置说明
  • 使用阿里云服务器搭建PostgreSQL主从架构图文流程
  • Linux的基本权限(文件,目录)
  • 网络编程(12): TCP重传、滑动窗口、流量控制、拥塞控制
  • Docker安装RabbitMQ服务端
  • vueuse常用方法
  • 选择大型语言模型自定义技术
  • 算法概述-Java常用算法
  • CCLINK转MODBUS-TCP网关cclink通讯接线图 终端电阻