Node.js使用ffi-napi,ref-napi,ref-array-di,ref-struct-di调用动态库-实例虹软人脸识别(一、基本概念)

系列文章目录

第一章 基础概念讲解(本章)
第二章 详解ffi-napi
第三章 详解ref-napi


前言

提示:这里可以添加本文要记录的大概内容:

本系列主要讲解在开发 electron 桌面应用过程中,需要配合使用厂家硬件,调用提供的 DLL 动态链接库的使用,主要案例是使用 虹软人脸识别 进行人脸识别


一、基本概念

ffi 即Foreign Function Interface,外部函数接口,是一个用于使用纯JavaScript加载和调用动态库的Node.js插件。它可以用来在不编写任何C++代码的情况下创建与本地DLL库的绑定。同时它负责处理跨JavaScript和C的类型转换

1、node-ffi 和 ffi-napi

1.1 node-ffi

GitHub仓库
node-ffi是ffi的官方版本,但我们不直接使用,具体下面说。
安装的时候会出现各种错误:

The module xxxxxx was compiled against a different Node.js version using NODE_MODULE_VERSION 69. 
This version of Node.js requires NODE_MODULE_VERSION 73
// 直接安装会出现这个问题,这个问题原因是这个模块编译的node版本和你目前使用的node版本不一致,所以解决方法是重新编译。
npm rebuild --runtime=electron --target=6.0.10 --disturl=https://atom.io/download/atom-shell --abi=73

但重新编译又出现了许多错误,具体原因是:

node-ffi里面会调用v8或其他依赖模块的接口,而这些接口已经更新了,有的接口改了名字,有的接口改了参数数量。但是node-ffi的调用接口语句并没有更新,所以编译不过。
所以 node-ffi 安装会有许多问题,它的介绍到这里。

1.2 ffi-napi

GitHub仓库
ffi-napi 是作者根据 node-ffi 修改发布到npm仓库的,伴随它用到的也一并修改和发布了,解决了上面的问题,所以我们使用 ffi-napi 来调用dll库。 ffi-napi API基本和 node-ffi 一致,但作者在仓库地址说明了,它在垃圾收集和多线程上有问题,我们不使用它的多线程。

官网教程文档

官方教程文档,在 node-ffiffi-napi 都是指向了 node-ffi 的文档,因为后者是根据前者改写的。
官方教程

1.3 ref-napi

这个模块定义了很多C/C++的常见数据类型,可以在声明和调用动态库的时候直接使用。
C语言中有4种基础数据类型—-整型、浮点型、指针、聚合类型,我们需要进行类型转换对应,所以需要此模块。
整型、字符型都有分有符号和无符号两种。(在不声明unsigned时 默认为signed型)

1.3.1 ref

refref-napi 貌似是同一个东西,只是 ref-napiffi-napi 配套开发的,是同一个作者,目前我只知道这么多,实际我们使用的也是配套的 ref-napi
Github

1.3.2 ref-napi

该库是 napi 系列的库。

特别说明,来自官方说明,Incompatible packages(不兼容的程序包),ref-struct-napi 和 ref-array-napi 看起来也是 napi 系列产品,但不是,在 structarray 中,配套的是 ref-struct-diref-array-di
Github

1.3.3 ref-array-napi 和 ref-array-di

这两个库,配套的是后者,前者不太兼容 napi系列。
这个模块在Node.js中提供了一个数组的实现,在声明和调用函数中,所有的指针都可以声明成一个uchar数组。
array-di
array-napi

1.3.4 ref-struct-napi 和 ref-struct-di

同样,后者是napi的系列库
这个模块在Node.js中提供了一个结构体类型的实现。ROCKEY-ARM的函数很多参数都是结构体指针,如果声明称uchar的数组,那么传出的数据都是uchar数组,解析的时候不方便,需要自己拼接,除了麻烦,还要考虑字节序的问题。如果使用结构体,并定义一个结构体数组来作为指针传入,函数返回的结构体参数,就可以直接用结构体进行解析,会比较方便。(这部分还不太懂,摘抄自参考目录)
struct-di
struct-napi

二、使用步骤

三、总结

参考

https://blog.csdn.net/youngbug/article/details/124280462
https://blog.csdn.net/fuhanghang/article/details/116058577

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值