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);

 

转载于:https://www.cnblogs.com/lswit/p/5044281.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值