nodejs安装ffi模块调用dll详解

本文详细介绍了在NodeJS环境下安装FFI模块的步骤,包括安装VS2015、NodeJS10、Python2.7.15、node-gyp及FFI等依赖,解决Cannot find module 'ffi'错误,并提供了调用DLL的注意事项。
部署运行你感兴趣的模型镜像

网上很多关于nodejs安装ffi的模块讲的条理实在太不清晰了,nodejs使用的VC++运行库对于不同的nodejs版本是不一致的。nodejs10需要的vs版本是vs2015。

1 安装vs2015的VC环境

安装vs2015时一定要勾选编程语言VC,因为nodejs的ffi模块依赖于vc环境。

2 安装nodejs

在nodejs官网上下载nodejs10的版本,nodejs 10网址
在这里插入图片描述
这里下载node-v10.21.0-x86.msi
下载完成后安装nodejs

3 安装ffi环境

以管理员权限打开cmd
输入如下第一条命令:

npm install --global --production windows-build-tools

在这里插入图片描述
如果上面这个命令安装出错,可以采用手动安装python的方式。上面这条命令就是是安装python2.7.15,其实可以不用上面这条命令,直接在python官网上下载python-2.7.15.msi
然后手动安装python2.7,安装好了后将python2.7的路径添加到环境变量里,如果电脑上之前安装了其它python3版本,必须把其它的python3版本的环境变量移除,保证在cmd里输入python,显示的版本号是2.7.15
在这里插入图片描述
接下来来安装node-gyp,使用如下命令:

npm install -g node-gyp

接下来安装ffi,使用命令:

npm install ffi

在这里插入图片描述
接下来安装ref,使用命令:

npm install ref

经过这一步,nodejs调用dll的环境就已经全部安装完了,我们查看安装包的列表:npm list
在这里插入图片描述

3 nodejs使用ffi调用dll函数

当我们在上面这一步中已经是安装成功了ffi,但是使用ffi过程中却发现,提示如下错误:Cannot find module 'ffi‘
如下所示:
在这里插入图片描述
这是因为我们使用npm安装的第三方模块处于如下位置:
在这里插入图片描述
因此我们需要添加如下的环境变量:
在系统环境变量里新建变量名:
在这里插入图片描述
变量名:NODE_PATH
变量值:C:\Users\Administrator.SC-201908311141\node_modules
变量值就是自己电脑上安装的ffi模块所在的node_modules目录
在这里插入图片描述
在这里插入图片描述
这个时候,可见已经能够找到ffi模块了。

4 使用ffi调用dll注意的问题

当我们使用ffi调用的这个dll只是单独一个,这个dll不依赖于其它的dll,这种情况下,把dll放到程序的当前运行目录或者其它文件目录里,调用都是没问题的。
当一个dll依赖于其它dll,这种情况下需要把所有的dll都放到程序运行根目录下,这样这个dll才能找到其它dll。如果我们也要把这些dll放到一个文件夹下,该如何处理了?
在这里插入图片描述
使用如下代码将这些dll所在的目录添加到临时环境变量里去:

var libPath = path.join(__dirname,"./dll/");
process.env.PATH = `${process.env.PATH}${path.delimiter}${libPath}`;

下面为自己的nodejs测试工程源码:

```css
'use strict';
console.log(process.cwd()) 
const path = require('path');

var libPath = path.join(__dirname,"./dll/");
process.env.PATH = `${process.env.PATH}${path.delimiter}${libPath}`;

let ffi = require('ffi');
let mydll = path.join(__dirname, './dll/QR_detectTest.dll');
let dll= ffi.Library(mydll, {
    'fpQR_detect': ['string', ['string']]
});
console.log(dll.fpQR_detect('./test/1.pdf'))

程序运行效果如下:
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Keras深度学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值