03.调用动态库
# 安装开发环境
npm install --global --production windows-build-tools
安装windows-build-tools;windows-build-tools自动安装基本的vs需要的包,和自动安装python 2.x的版本。
配置python环境变量控制面板>系统>关于>高级系统设置>环境变量>系统变量>找到path
配置微软的包版本
npm config set msvs_version 2017
npm config set python C:\Users\leeru\.windows-build-tools\python27\python.exe
npm config set ELECTRON_MIRROR http://npm.taobao.org/mirrors/electron/
npm config edit
4.打开Visual Studio Installer导入vs配置项一键导入.vsconfig
文件(自己编辑)
vs配置项一键导入.vsconfig
{
"version": "1.0",
"components": [
"Microsoft.VisualStudio.Workload.VCTools",
"microsoft.visualstudio.component.vc.cmake.project",
"microsoft.visualstudio.component.testtools.buildtools",
"microsoft.component.vc.runtime.ucrtsdk",
"microsoft.visualstudio.component.windows81sdk",
"microsoft.visualstudio.component.vc.140",
"microsoft.visualstudio.component.node.build",
"microsoft.visualstudio.component.nuget"
]
}
完成!!!
# 安装ffi-napi
node-ffi是一个用于使用纯JavaScript加载
和调用
动态库的Node.js插件
。它可以用来在不编写任何C++代码的情况下创建与本地DLL库
的绑定。同时它负责处理跨JavaScript和C++的类型转换
。
node-ffi连接了C代码和JS代码
, 通过内存共享来完成调用, 而内部又通过ref,ref-array和ref-struct来实现类型转换。
"ffi-napi": "^2.4.5",
const ffi = require('ffi-napi');
// 加载dll的库
// 工作项目用到了身份证阅读器的.dll(sdtapi.dll基础api, WltRS.dll图像写入)
const sdtapi = ffi.Library(path.join(__static, '../extraResources/sdtapi.dll'), {
SDT_StartFindIDCard: ['int32', ['int32', 'pointer', 'int32']],
SDT_SelectIDCard: ['int32', ['int32', 'pointer', 'int32']],
SDT_GetSAMID: ['int32', ['int32', 'string', 'int32']],
SDT_GetCOMBaud: ['int32', ['int32', 'int32']],
SDT_OpenPort: ['int32', ['int32']],
SDT_ClosePort: ['int32', ['int32']],
SDT_GetSAMStatus: ['int32', ['int32', 'int32']],
SDT_ResetSAM: ['int32', ['int32', 'int32']],
SDT_ReadBaseMsg: ['int32', ['int32', 'pointer', 'pointer', 'pointer', 'pointer', 'int32']]
});
const wltrs = ffi.Library(path.join(__static, '../extraResources/WltRS.dll'), {
BYYJ_GetBmp: ['int32', ['string', 'int32']]
});