zoukankan      html  css  js  c++  java
  • Electron通过nodeffi调用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/

    提示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编译一下
    如果源码都无法跑通,那只有具体问题具体分析了。看看是不是没有权限,是不是一些关键的文件夹没有创建。这时可以手动创建etc
    Electron引用手动编译的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 application
    npm 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* 可以直接传String

    var 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

  • 相关阅读:
    通过构造函数检查生成对象个数
    动手动脑二
    产生随机数的几种方法
    素数输出
    递归实现回文串
    java的方法重载
    统计单词频率
    四则运算和随机验证码
    微信小程序--家庭记账本开发--04
    微信小程序--家庭记账本开发--03
  • 原文地址:https://www.cnblogs.com/onesea/p/15691797.html
Copyright © 2011-2022 走看看