zoukankan      html  css  js  c++  java
  • Node调用C++(dll)

    最近开始搞毕设了,打算用自己拿手的js来搞,但是仿佛入坑了,Node还不是很熟。总之,兵来将挡,水来土掩嘛,带着问题学习才是最高效的。


    折腾1:Node 调用 C++

    刚开始,虽然我老师把dll文件给我了,但是我一直以为是用Node调用C++,然后一直在折腾怎么编写addon,怎么将C++编译然后用Node调用,未果。。。T_T,还差点在stackoverflow上提问了。。

    中途遇到个传参的问题,还搜了好多资料,解决方案:v8 string to char*

    但是,再怎么说,也折腾过了,对照着《深入浅出Node.js》中的模块部分,还是理解了不少的。要想走得更远,前面的路是少不了的。

    好哒,把步骤写一下吧:

    1. 需要 node-gyp 模块

    $ npm install node-gyp -g
    

    2. 安装 python 环境

    官网

    注意: 根据 node-gyp 的GitHub显示,请务必保证你的 python 版本介于 2.5.0 和 3.0.0 之间。

    3. 写文件

    • binding.gyp
    • test.cc
    • test.js

    具体内容请参考 Node.js调用C/C++

    注意:网上搜集的有些博文时间有些久,node 的写法在变,比较老的写法可能会报错,所以,最好去看官网上的例子,如 Hello World例子--官网

    4. 编译

    $ node-gyp configure
    $ node-gyp build
    

    node-gyp configure 命令生成适用于当前平台的构建文件,同时会在 build 目录下生成一个适用于 UNIX 平台的 Makefile 或者适用于 Windows 平台的 vcxproj 文件。

    调用 node-gyp build 命令会在 build/Release/ 目录下编译生成 addon.node 文件。

    5. 运行

    $ node test.js
    

    6. 入门例子

    Node.js调用C/C++

    Hello World例子--官网

    6. 参考

    Nodejs 6.x 中文文档

    Node.js v7.2.1 Documentation

    Node.js 和 C++ 之间的类型转换

    Javascript里有个C:Part 1 - 基础


    折腾2:Node 调用 dll

    突然惊觉在 C++ 里调用的是动态链接库dll里面的函数,原来努力方向错了,而且并不需要那么复杂,编译之类的,用VS最恶心的是还得配置各种库,如 boost,我还真是够有耐心的。。。

    因此,Google搜索:nodejs调用dll

    ☛ 步骤如下:

    1. 首先参考 Node 调用 C++ 中的环境配置,安装 node-gyp 及 Python 环境

       $ npm install node-gyp -g
      

      安装 python 环境:官网

      注意: 根据 node-gyp 的GitHub显示,请务必保证你的 python 版本介于 2.5.0 和 3.0.0 之间。

    2. 安装 node-ffi

       $ npm install ffi
      

    ☛ 实践:

    因为我的 dll 文件只暴露了一个 Query 方法,所以我的 query.js 文件如下:

    // query.js
    
    var ffi = require('ffi');
    
    var libm = new ffi.Library(__dirname + '/imagesearcherdll', {
        'Query': [
            'string', ['string', 'string']    // 方法名:["返回值类型",["参数1类型","参数2类型"]]
        ]
    });
    
    var sketchPath = './public/img/tmp.png',
        outputFile = 'result.txt';
    
    libm.Query(sketchPath, outputFile);
    

    最后,执行 node query.js 即可运行。

    ➹ 参考如下:

    通过ffi在node.js中调用动态链接库(.so/.dll文件)

    nodejs调用dll/so文件的方法

    然后又折腾了会,要不就是传参错了,或者路径错了,总之,这些都是小事儿啦,最后,终于成功了!!Node效率果然高!

  • 相关阅读:
    jfreechart简单介绍---曲线图
    Java监听器
    在java里actionPerformed是做什么用的
    sqlserver,oracle,mysql等的driver驱动,url怎么写
    ibatis入门实例(完整)
    java连接access数据库的三种方式以及远程连接
    elementui入门以及nodeJS环境搭建
    vue路由
    vue模板语法下
    vue模板语法上
  • 原文地址:https://www.cnblogs.com/Ruth92/p/6209953.html
Copyright © 2011-2022 走看看