01.09 electron之集成node-ffi-napi

调用第三方DLL采用ffi-napi

一、集成环境

1)electron需要6.0.0版本

2)安装electron-rebuild,以便编译node-java

3)node版本12.8.1,npm版本6.10.2

4)全局安装node-gyp 和 Windows-Build-Tools


二、安装ffi-napi

npm i ffi-napi

注意:如果项目目录中存在空格,则会出现 fatal error C1083: 无法打开包括文件: “get-uv-event-loop-napi.h” 的错误

electron之集成node-ffi-napi

三、使用ffi-napi

<code>let ffi = require('ffi-napi');
// 通过ffi加载user32.dll,此dll已注册到注册表中,所以可以直接用名字调用
const myUser32 = new ffi.Library('user32', {
'MessageBoxA': // 声明这个dll中的一个函数
[
'int', ['int', 'string', 'string', 'int'], // 用json的格式定义其返回类型和参数类型
],
'MessageBoxW': // 声明这个dll中的一个函数
[
'int', ['int', 'string', 'string', 'int'], // 用json的格式定义其返回类型和参数类型
],
});

// 调用user32.dll中的MessageBoxA()函数, 弹出一个对话框
let iconv = require('iconv-lite');
function iconvEncode(text) {
return iconv.encode(text + "\\0", 'gbk') //解决乱码,如果不加\\0,则会出现乱码
}
let isOk = myUser32.MessageBoxA(
0, iconvEncode('这是user32 Dll 的 MessageBoxA 弹窗!'), iconvEncode('温馨提示'), 1
);

// 调用user32.dll中的MessageBoxW()函数, 弹出一个对话框
let {Buffer} = require('buffer');
function showText(text) {
return Buffer.from(text + "\\0", 'ucs2'); //解决乱码,如果不加\\0,则会出现乱码
}
isOk = myUser32.MessageBoxW(
0, showText('这是user32 Dll 的 MessageBoxW 弹窗!'), showText('温馨提示'), 1

);/<code>


分享到:


相關文章: