当前位置 : 主页 > 编程语言 > java >

electron 调用 dll 文件方法,和常见问题解决

来源:互联网 收集:自由互联 发布时间:2022-06-23
调用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动态库我这里主要用了以下几个依赖:


"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 是一致的。
复制代码

我这里用的 window 7 系统的 其他版本的系统应也是差不多的


实现步骤


安装ffi之前需要的环境有4个
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版本,就改成2015
npm 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文件


上一篇:Java8中Lambda函数式编程详解
下一篇:没有了
网友评论