上篇文章我们已经实现调用C#的动态库文件,现在我们试试调用C++动态库文件。
- 安装windows-build-tools,这里注意需要使用管理员权限在命令窗口安装。
npm install --global --production windows-build-tools
注意:
安装时会卡在 Successfully installed Python 2.7 的界面。 解决如下: 1、保证你安装了Visual Studio 2、在资源管理中搜索%temp% ,window系统按住win按键直接搜索就可以 3、在搜索到的文件夹%temp% 中创建dd_client_.log文件,并且填入内容 Closing installer. Return code: 3010.
-
安装
yarn add ffi-napi
安装成功
-
构造调用dll的工具类
const ffi = require("ffi-napi"); const path = require("path"); const testCpp = ffi.Library(path.resolve("resources/Pressure_Resize.dll"), { PR_SetSize: ["string", ["int"]], PR_Init: ["string", []], PR_Get: ["string", ["int", "int"]], PR_Get3DArray: ["string", []], }); export default { prSetSize(s) { return testCpp.PR_SetSize(s); }, prInit() { return testCpp.PR_Init(); }, prGet(args1, args2) { return testCpp.PR_Get(args1, args2); }, prGet3DArray() { return testCpp.PR_Get3DArray(); }, };
-
渲染进程调用需要用到ipc,ipcMain的代码
ipcMain.handle("prSetSize", (event, args) => { return new Promise((resolve, reject) => { return resolve(cpp.prSetSize(args)); }); });
ipcRender的代码
contextBridge.exposeInMainWorld("ipcInvoke", { prSetSize: args => { return ipcRenderer.invoke("prSetSize", args); }, });
vue调用代码
window.ipcInvoke .prSetSize(2) .then((data) => { log.debug("倍数结果:", data); }) .catch((err) => { log.debug("倍数失败:", err); });
这样直接启动会报错,记住vue.config.js需要增加配置
module.exports = { pluginOptions: { electronBuilder: { preload: "src/preload.js", externals: ["ffi-napi"], }, }, };
-
调用成功截图