zoukankan      html  css  js  c++  java
  • node.js调用ffi

    原帖

    例一:调用系统的user32.dll函数 MessageBoxW,有4个参数,输出一个整数 ,

    var FFI = require('ffi');
    
    function TEXT(text){
       return new Buffer(text, 'ucs2').toString('binary');
    }
    
    var user32 = new FFI.Library('user32', {
       'MessageBoxW': 
       [
          'int32', [ 'int32', 'string', 'string', 'int32' ]
       ]
    });
    
    var OK_or_Cancel = user32.MessageBoxW(
       0, TEXT('I am Node.JS!'), TEXT('Hello, World!'), 1
    );
    console.log(OK_or_Cancel);

    例二、调用当前目录下的libTest.dll,里面有一个函数factorial,输入一个整数,输出一个整数

    var FFI = require('ffi');
    var func = new FFI.Library('libTest', {
       'factorial': 
       [
          'int32', [ 'int32']
       ]
    });
    
    var n = func.factorial(5);
    console.log(n);

    三、说明 可以注意到FFI.Library的第二个参数是json,里面列出了需要用到的函数名,输入参数格式,输出结果的格式;

    'int32', [ 'int32', 'string', 'string', 'int32' ]

    这里就表明, (1)输出结果为整数; (2)后面的数组表示有4个参数,参数格式依次是整数,字符串,字符串,整数 ( 3 ) 字符串要转化一下才可以使用; 注意看例一; new Buffer(text, ‘ucs2’).toString(‘binary’); ffi模块同样能调用*inux 下的so文件

    我自己写的调用dll文件的:

    var ffi = require('ffi');
    
    var eqpt_pwd = '12312';
    var key = '057100000153tt6a7dg3tp36g79shnz0dubkv4eq432pl23x6st8or5mkbygem61';
    
    //调用create_direct_opt_by_user.dll中的get_eqpt_pwd函数
    //输入:两个string类型的数据
    //输出:一个string类型的数据
    var pwd = new ffi.Library('create_direct_opt_by_user', {'get_eqpt_pwd':[
        'string', ['string', 'string']
        ]
    });
    
    var test = pwd.get_eqpt_pwd(eqpt_pwd, key);
    console.log(test);
  • 相关阅读:
    创建vlan 和 节点vlan 连通性排查
    FRRouting SR-MPLS
    mpls over gre
    linux mpls
    交换机vlan
    neutron subnet + router
    neutron 层次绑定 +binding_levels
    frrouting命令补全 + 启动失败排查
    Paper Pal:一个中英文论文及其代码大数据搜索平台
    游戏服务器设计 Unity3d + photon + grpc + nodejs + postgis/postgresql
  • 原文地址:https://www.cnblogs.com/lswit/p/5044281.html
Copyright © 2011-2022 走看看