[杂乱]Electron通过node-ffi调用C++dll
2017-12-18 18:31
1216 查看
Electron通过node-ffi调用C++dll
ffi安装与调用
安装node-gyp安装前提条件
python(v2.7 ,3.x不支持);
visual C++ Build Tools,或者 (vs2015以上(包含15))
.net framework 4.5.1
如果是干净的环境可以用下面命令一键安装
npm install --global --production windows-build-tools
安装命令
npm install -g node-gyp
遇到问题
python找不到或者环境不对查看命令行python是否可用,如果不可用,设置path.确定命令行可用。多版本的可以参考网上相关教程进行设置
命令行可用。可以通过下面命令设置
npm config set python D:\Library\Python\Python27\python.exe
如果不行执行下面的
node-gyp configure --python v2.7.3 --verbose
node-gyp rebuild 出错
重装node-gyp
依次执行下面的命令
npm uninstall node-gyp -g npm i -g windows-build-tools# 环境已用不用执行 npm install -g node-gyp npm iconfig set python python npm i microtime --save-dev
提示找不到系统SDK
安装对应的SDK 或者强行设置为当前系统安装的SDK。
node-gyp 配置错误
设置代理端口
--proxy=http://myproxyurl/ 或者 npm config set registry http://registry.npmjs.org/[/code]
提示https超时或者异常
改用http请求npm config set registry http://registry.npmjs.org/ npm config get registry # 确定是不是http,有时设置可能失败,原因未知
msBuild.exe错误
设置vs版本npm install --msvs_version=2013 npm install --msvs_version=auto #上一句不行试一下这一句
也可能是node,npm版本不匹配,可以更新一下版 本npm install npm -g
这里说一个强行更新版本的方式 ,找到package.json打到对应的模块更改版本号,然后执行npm install
如果一切设置不对可以尝试下面命令node-gyp configure --verbose安装ffi 也可能叫node-ffi
前提条件要安装node-gyp
执行命令安装npm install ffi
如果命令安装不成功可能是windows没有安装gcc,可以下载安装
如果还不成功可以下源码自己编译安装
源码地址
如果用git可以执行下面的命令git clone git://github.com/node-ffi/node-ffi.git cd node-ffi node-gyp rebuild
如果上面的成功就可以把这个模块拷到node_mouduble可以直接使用。但是Electron还不行还要用Electron编译一下
如果源码都无法跑通,那只有具体问题具体分析了。看看是不是没有权限,是不是一些关键的文件夹没有创建。这时可以手动创建etcElectron引用手动编译的ffi
相关知识点介绍,手动编译为第三种模式
然后可以执行下面的命令,一定要在模块当前目录下面执行,不然会找不到bindings文件node-gyp rebuild --target=1.7.9 --arch=x64 --target_arch=x64 --dist-url=https://atom.io/download/electron
参数说明 target对应electron版本
arch 对应32还是64
后面的网址会下electron对应的头文件,如果地址不行多尝试,多尝试,如果还是不行那可以考虑淘宝https://npm.taobao.org/mirrors/atom-shell可能遇到的问题
%1 is not a valid Win32 applicationnpm rm node-sass npm install node-sass
electron重新编译不通过可能少下面的模块,可以全局安装也可以仅安装当前项目npm install nan npm install ref npm install ref-array
把program.exe的错误可能是node.js安装不正确或者配置不正确
vscode 扩展意外死亡
可能是Git扩展的问题,删除一下
如果git删除了还是不行,可能是node.js环境配置不对,我这里出现的问题调度node.js会出这个问题,可是node.js扩展是集成的。所以不可能不用,所以要重置
node.js 删除干净,一定要干净。动态库的调用
引用ffi模块和声明对应的类型,char* 可以直接传Stringvar ffi = require('node-ffi') var ref = require('ref'); var ArrayType = require('ref-array') var intPtr = ref.refType('int'); var floatPtr=ref.refType('float'); var float=ref.types.float; var floatArray = ArrayType(float);
引用和指针类型的单个变量可以如下var outNumber = ref.alloc('float'); var actualNumber = outNumber.deref();
可以像js方法一相export让别人调用exports.User32 = ffi.Library('user32', { 'GetWindowLongPtrW': ['int', ['int', 'int']], 'SetWindowLongPtrW': ['int', ['int', 'int', 'long']], 'GetSystemMenu': ['int', ['int', 'bool']], 'DestroyWindow': ['bool', ['int']] });
数组的相关用法可以参考这个地址
其它值类型和其它引用类型可以参考这个ref常见错误
链接错误
这一类的错误一般要不就是dll没有找到要不就是dll有依赖其它的dll,可以参考错误编码
引用错误,可以在模块当中用很折模块引用了ref,可能都要通过electron进行编译
下载地址:http://download.csdn.net/download/liyangyang08/10163491
面对未知尝试是我们唯一能做的事情
相关文章推荐
- electron 使用 node-ffi 调用 C++ 动态链接库(DLL)
- electron 使用 node-ffi 调用 C++ 动态链接库(DLL)
- electron 使用 node-ffi 调用 C++ 动态链接库(DLL)
- 在Electron中通过ffi模块实现JavaScript调用C++动态库
- Electron通过ffi调用DLL
- C++通过CLR调用C#dll--如何定义合适的参数
- JAVA通过JNI调用c++本地方法dll
- C++通过DLL调用C#代码
- Node调用C++(dll)
- 非托管C++通过C++/CLI包装调用C# DLL
- node ffi调用C、C++动态库出现的问题
- nw 调用C++ 插件(.node/.so/.dll)
- 通过P/Invoke调用32位C++ DLL时,一定要将平台改为X86
- 用C++扩展Electron(node-ffi版)
- C#的Form通过CLI调用C++的DLL
- Matlab与c++混合编程[四.通过VC调用Matlab编译产生的dll文件]
- C++通过DLL调用C#代码
- Java学习之通过JNI调用C/C++编写的dll链接库(图文教程)
- 通过ffi在node.js中调用动态链接库
- C++如何调用DLL呢,有两种,一种是静态,另外一种是动态,即通过调用windowsAPI 来加载和卸载DLL,具体思路: