专业的JAVA编程教程与资源

网站首页 > java教程 正文

electron之集成node-ffi-napi

temp10 2024-12-13 16:20:24 java教程 11 ℃ 0 评论

调用第三方DLL采用ffi-napi

一、集成环境

electron之集成node-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” 的错误

三、使用ffi-napi

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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表