rust + gnome.gtk 实现的【图形用户界面】版 [npm( 四 )


异步接口调用
const fs = require('fs');const ffi = require('ffi');const ref = require('ref');const path = require('path');const util = require('util');// 准备【问卷配置】`json`文件const homeDir = path.resolve('target/setup-lib');const questionsFile = path.join(homeDir, 'assets/prompt-manifest.json');const readFile = util.promisify(fs.readFile);readFile(questionsFile, {encoding: 'utf8'}).then(questions => {// 加载 DLLconst dllFile = path.join(homeDir, 'bin/scaffold_wizard.dll');const dllDir = path.dirname(dllFile);const scaffoldWizard = ffi.Library(dllFile, {inquireAsync: ['void', ['string', 'string', 'string', 'pointer']]});// 调用 DLL// inquire(...) 一共有三个输入参数// (1) JSON 格式字符串,包括了【问卷配置】// (2) 被加载 DLL 文件所在的目录 。以此,来寻找 assets\images 目录 。// (3) log4rs 的配置文件路径 。传一个空指针,表示关闭日志功能 。// 输出返回值是 JSON 格式字符串,包括了【回答结果】scaffoldWizard.inquireAsync(questions, dllDir, ref.NULL_POINTER, ffi.Callback('void', ['string', 'string'],finishedBuilder((err, answers) => {if (err) {console.error('失败原因', err);} else {console.info('被收集的答案包括', answers);}})));});function finishedBuilder(callback){let timerId;const holding = () => { // 锁住 event loop,不立即结束程序 。timerId = setTimeout(holding, 1000 * 60 * 60);};holding();return (err, answers) => {clearTimeout(timerId); // 解锁return callback(err, answers);};}
N-API封装
即将到来 。
Neon封装
即将到来 。
执行演示
运行这款工具分发包的最简单方式就是:
双击\setup-bin\bin\-.exe
直接弹出【文件选择对话框】,默认打开\setup-bin\文件夹,要求你选择一个【问卷配置】json文件 。
选择-.json文件,点击【打开】按钮 。
开始回答问题 。
期间,不能退出 。
完成所有问题之后,点击【完成】按钮 。
程序退出 。
【回答结果】json文件被输出到和输入文件相同的目录下,文件名为.json 。
我已经在 10x64与 7x64亲自验证过了 。
运行test case rust test case
从打开工程
菜单 -> 终端 -> 运行任务 ->test-sync
运行 test case
node调用的test case
推荐node版本是10
$ node npm-module/test.js
希望路过“大神”帮我看看
【rust + gnome.gtk 实现的【图形用户界面】版 [npm】我这cargo build --编译出来的dll与exe都有点儿大(大约20MB) 。这似乎有些不正常 。路过的【神仙哥哥】与【神仙妹妹】是否可以帮我看看,我这是代码或编译配置,哪里有问题呀?