(四)electron尝试使用win32 API——node-gpy到底是干嘛的?

来源:互联网 发布:node sass下载失败 编辑:程序博客网 时间:2024/05/22 05:19
--------------------------------------DAY 4--------------------------------------------------------------
Q:测试之后,发现electron已经可以准确的知道windows进程的窗口句柄HWND,接下来要利用ipc,把electron进程的主窗口发送给HWND

A:原生的API做不到,我们要导入win32的DLL和库之类的东西,在electron里面调用user32.dll里面的sendMessage函数

————参考 https://www.cnblogs.com/Starts_2000/p/electron-ffi.html

先安装Python 2.7(x64), 然后设置好环境变量,可以在cmd下直接输入python命令得到相应的提示

Q:准备使用命令 npm install来安装依赖包ffi, 发现报错: 

gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.

A: 先使用 npm install -g node-gyp 命令安装node-gyp, 再使用命令
Q:在git bash的命令行下直接输入python ,提示  bash: python: command not found

A:在cmd中有python的环境变量,但是不知道为什么在git bash的命令行下没有,在cmd下输入命令npm install也是同样的问题,找不到python

原来是因为在用户环境变量中设置了,但是没有在系统环境变量中设置

Q:安装python 2.7 ,在cmd下输入python有反应————说明环境变量设置没有问题,但是在输入npm install去安装ffi依赖包时,就提示找不到Python
A: 我重新安装了python 2.7————这回换成了32位的msi文件来安装,然后输入npm install 又出现了新的问题。


Q: 归根结底就是 ffi的安装问题,参考 https://futurestud.io/tutorials/how-to-build-nodegyp-to-run-bcrypt-on-windows 先来一遍 node-gyp的安装
最后,node-gyp似乎安装好了。

知其然,还要知其所以然,node-gyp是一个本地插件生成工具 
Q:在运行node-gyp config的时候出现了错误,也就是说,我们的node-gyp是有错误的:
binding.gyp not found (cwd: C:\Users\admin\Desktop\electron_example) while trying to load binding.gyp
A: 也就是说找不到这个文件,我根据 https://github.com/nodejs/node-gyp#installation 的指引,手动创建了一个————欲知后事如何,请往下阅读


重新来一遍,在原来的electron运行成功的前提下再来一次
npm install -g node-gyp 全局安装node-gyp  -----------> 安装成功
输入命令 npm config set msvs_version 2013 搞定2013版本
接下来其实就是 node-gyp怎么使用的问题!!!————————是不能直接用npm install ffi来安装的,会报错,缺少几个文件
Q:那么src\binding.cc, node_modules\ref\build\binding.vcxproj 这2个文件该如何生成呢??————一脸懵逼???




Q:报错:某.node文件was compiled against a different Node.js version using NODE_MODULE_VERSION 51. This version of Node.js requires
NODE_MODULE_VERSION 53. Please try re-compiling or re-installing the module (for instance, using `npm rebuild` or`npm install`).
A:参考 https://stackoverflow.com/questions/42616008/node-module-version-conflict-when-installing-modules-for-electron——————按照上面的方法解决了- -


Q:再次运行,出现了新问题,如下图:


A:
http://blog.csdn.net/jackyvan/article/details/47261365

binding.node这个是我们用node-gyp生成来的,我们的node-gyp还没有完全配置好,肯定生成出来的程序不完整,就不是一个有效的exe啦
所以,归根结底还是node-gyp安装之后的配置,第一步是 node-gyp configure, 那么对应的binding.gyp 是干什么用的呢

决定卸载重装全部再来一次0 0 
node.js(含npm)重新装了
electron重装可以运行了
node-gyp也重装了(没有自带,亲测)——————安装之后也是可以直接uninstall卸载的
准备回家试试node-gyp这个东西,它的作用是让node调用C++的DLL ——————参考 https://www.npmjs.com/package/ffi


在不安装node-gyp的情况下,基本没问题。
安装了node-gyp之后,也对原文件没有影响
其实,我该仔细研究一下node-gyp, 为什么安装ffi之间一定要安装node-gyp呢?


报错: C:\Users\admin\.node-gyp\8.9.1\ia32\node.lib : fatal error LNK1127: 库已损坏


重点参考 http://deadhorse.me/nodejs/2012/10/08/c_addon_in_nodejs_node_gyp.html(尝试看懂node-gyp的作用)————binding.gyp指定C部分源文件路径和最终生成模块的名称,此例中将会生成一个可以被node调用的binding.node文件,如下:

{  'targets': [    {      'target_name': 'binding',      'sources': [ 'binding.cc' ]    }  ]}

http://blog.csdn.net/cut001/article/details/68922780
node-gyp应该是让我们可以加入一些C语言给我们的node调用,猜测ffi就是用C语言写好的兼容node.js的win32 API的封装。利用node-gyp去安装好ffi这个模块

原创粉丝点击