调用dll动态库我这里主要用了以下几个依赖: "dependencies": { "ref-array-napi": "^1.2.0", "ref-napi": "^1.4.3", "ref-struct-napi": "^1.1.0", "ffi-napi": "^2.4.7" } 注意:dll 是 64位还是 32 位的 ,它和 node 是一致
调用dll动态库我这里主要用了以下几个依赖:
"ref-array-napi": "^1.2.0",
"ref-napi": "^1.4.3",
"ref-struct-napi": "^1.1.0",
"ffi-napi": "^2.4.7"
}
注意:dll 是 64位还是 32 位的 ,它和 node 是一致的。
复制代码
我这里用的 window 7 系统的 其他版本的系统应也是差不多的
实现步骤
1. python2.x 这里我用的是2.7版本,(3.x不支持); 安装完成后需要将python设置为环境变量
2. .net framework 4.5.1
3. visual C++ Build Tools,或者 (vs2015以上(包含15))
4. cnpm install --global --production windows-build-tools
1、我这里先将 npm 改为 淘宝镜像 cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
2、首先安装 node-gyp
cnpm install node-gyp -g
3、安装以上依赖
"ref-array-napi": "^1.2.0",
"ref-napi": "^1.4.3",
"ref-struct-napi": "^1.1.0",
"ffi-napi": "^2.4.7"
4、调用方法
1. const ffi = require("ffi-napi"); // 引入ffi
// `ffi.Library`用于注册函数,第一个入参为DLL路径,最好为文件绝对路径
2. const libm = ffi.Library("./dll/x64/MTScaleAPI/MTScaleAPI.dll", {
//ExecuteTaskInFile是dll中定义的函数,两者名称需要一致
//[a, [b,c....]] a是函数出参类型,[b,c]是dll函数的入参类型
ExecuteTaskInFile: ['int', ['object']],
}); // 找到dll文件引入
4、完事试试运行
复制代码
问题解决
Q:
error msb4019:未找到导入的项目“C:\Program Files (x86 )\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Default.props”
复制代码
A:
// 在命令行执行改命令即可,2017 是你当前vs对应的版本,比如你装的是2015版本,就改成2015npm config set msvs_version 2017
复制代码
Q:
Uncaught Error: Dynamic Linking Error: Win32 error 126复制代码
A:
Dll引用的路径不对,检查路径是否书写正确,需要用绝对路径复制代码
Q:
Uncaught Error: Dynamic Linking Error: Win32 error 193复制代码
A:
dll 位数不对应,例如electron/nodejs是32位的dll是64位的复制代码
Q:
Uncaught Error: Dynamic Linking Error: Win32 error 127复制代码
A:
DLL中没有找到对应名称的函数,需要检查头文件定义的函数名是否与DLL调用时写的函数名是否相同。Dll错误,检查你的dll文件是否还引用了其他的资源及dll文件
复制代码
Q:
Uncaught Error: Dynamic Linking Error: Win32 error 1114复制代码
A:
dll初始化失败,一般是在打包成exe文件发生,可能是你的dll在打包后的位置不正确,程序调用不到就会去系统c盘找对应的dll文件