zoukankan      html  css  js  c++  java
  • 在Node.js中使用ffi调用dll

    类似的文章还是比较多的,但或多或少有一些问题没有解决,在此我将其整合并分享给大家:

    测试环境:
    • Node.js 9.9.0
    • VisualStudio 2015
    • "ffi": "gavignus/node-ffi#torycl/forceset-fix",
    • "ref": "1.3.5"
    • "ref-array": "1.2.0"
    • "ref-struct": "1.1.0"
    • "ffi-napi": "^2.4.3"
    编译失败:

    当前情况下编译ffi会失败,所以有两种解决方法:

    1. 使用新的ffi-napi(api是一样的,同时支持node.js新的napi)
    2. 使用第三方修改过的ffi,在package.json中,将ffi后面的版本号改成

    "ffi": "gavignus/node-ffi#torycl/forceset-fix"

    使用:
    var ffi = require('ffi');
    
    //第一个形参为dll所在位置(dll文件可以不用加.dll),第二个为函数信息
    var libm = ffi.Library(__dirname + 'dllFile', {
        //函数名
        'fun': ['int', ['string', 'string']]
    });
    
    //调用
    var str1="a";
    var str2="b";
    libm.fun(str1, str2);
    
    使用c++里的类型

    ref、ref-struct、ref-array、ref-union、ref-wchar
    在npm查看使用方法,在此不做赘述。

    运行时遇到的错误

    1.c++代码是可以用的,但是需要把代码写在extern "C"{}里,不过这个我没有亲自试过。
    2.dll文件需要放到node.js 执行目录,也就是

    //即x:xxxxxxx
    cd /d x:xxxxxxx;
    node xxx.js;
    

    3.dll如果有互相依赖的必须放全。不然只会出现错误126,而不会像一般程序那样提示缺少xxx.dll。所以报错了可以用depends看一下,dll全了没。
    4.dll的需要与node.js的平台相对应,比如你的node.js是64位版本的,那你的dll也需要使用64位编译。

    错误126:检查上述1、2、3步。

    参考:

    wiki:
    https://github.com/node-ffi/node-ffi/wiki/Node-FFI-Tutorial

    有问题在issue里搜下就好

    https://www.jianshu.com/p/914103283ea0
    https://blog.csdn.net/zhulin2609/article/details/51474676

  • 相关阅读:
    概率算法_二项分布和泊松分布
    数据库_存储过程简介(oracle版)
    机器学习算法_knn(福利)
    统计算法_概率基础
    统计算法_数值/线性关系度量
    Python总结
    Python 冒泡排序法分析
    Oracle练习详解
    LINUX基础了解
    LINUX下OA搭建
  • 原文地址:https://www.cnblogs.com/blueroses/p/9766309.html
Copyright © 2011-2022 走看看