如何创建Electron + Vue3项目, 并调用C# dll

news/2024/10/19 11:57:28

依赖环境

当前系统环境为win11,真正上手才知道环境问题才是最大的问题,希望本文能帮你节约时间。
本文参考以下资料
https://www.electronforge.io/guides/framework-integration/vue-3
perplexity.aikimi.ai提供其他相关资料

nodejs

在开发前需要确定你要调用的dll是32位还是64位的,你的nodejs需要切换到对应的版本,这里推荐使用nvm来管理
nodejs版本,千万不要用Volta。在https://github.com/coreybutler/nvm-windows/releases下载nvm.

这里以调用32位dll为例,下载安装后执行以下命令,如果你的dll是64位的就把32换成64

nvm install 20 32
nvm use 20 32

依赖工具

在开发过程中要调用dll还需要pythonVisual Studio Build Tool,这里推荐使用Chocolatey安装

Chocolatey

  1. 以管理员身份打开命令提示符
  2. 输入以下命令并回车
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

python 与 Visual Studio Build Tool

  1. 输入以下命令并回车
choco install python visualstudio2022-workload-vctools -y

Visual Studio

开发c#需要Visual Studio,这里推荐Visual Studio 2022,下载地址https://visualstudio.microsoft.com/downloads/,安装选项如下狗血即可

创建项目

vue3 + electron

  1. 安装electron
npm init electron-app@latest my-vue-app -- --template=vite
  1. 进入my-vue-app安装vue
cd my-vue-app
npm install vue
npm install --save-dev @vitejs/plugin-vue
  1. 修改index.html
<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>Hello World!</title></head><body><div id="app"></div><script type="module" src="/src/renderer.js"></script></body>
</html>
  1. 新建src/App.vue
<template><h1>💖 Hello World!</h1><p>Welcome to your Electron application.</p>
</template><script setup>console.log('👋 This message is being logged by "App.vue", included via Vite');
</script>
  1. 修改src/renderer.js
import { createApp } from 'vue';
import App from './App.vue';createApp(App).mount('#app');
  1. 修改vite.renderer.config
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';// https://vitejs.dev/config
export default defineConfig({plugins: [vue()]
});

如此就你创建了一个vue3+electron应用了

调用c# dll

electron-edge-js

注意electron-edge-jselectron大版本需保持一致,electron-edge-js各版本要求nodejs版本不同,具体查看https://www.npmjs.com/package/electron-edge-js,如果你的dll是64位的就无需添加--arch=ia32

npm install electron-edge-js@32 electron@32 --arch=ia32

重新编译

为了保证环境不出问题,依次执行以下命令,package-lock.json最好也删除掉,如果你的dll是64位的就无需以下操作

:: npm清除缓存
npm cache clean --force
:: 删除依赖目录
rmdir /s /q node_modules
:: 重新安装依赖
npm install --arch=ia32
:: 重新编译依赖
npx electron-rebuild --arch=ia32

简单dll开发

创建项目

使用Visual Studio 2022创建项目,如图所示


因为我们的项目是32位的,所以生成配置需要如下配置,否则会无法调用,如果你的dll是64位的就无需以下操作

简单代码

将默认的Class1重命名位Test,并修改代码如下,注意方法返回类型必须是Task<object>,不然调用时会报错

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace Test
{public class Test{public async Task<object> SayHi(dynamic input){Console.WriteLine(input.ToString());// 模拟异步操作await Task.Delay(1);// 返回一个字符串结果Console.WriteLine("c# result");return "true";}}
}

调用dll

  1. 修改electron-ui/src/main.js
    const path = require('node:path');代码后添加以下代码
const edge = require('electron-edge-js');// Handle creating/removing shortcuts on Windows when installing/uninstalling.
if (require('electron-squirrel-startup')) {app.quit();
}ipcMain.handle('dllTest', async (event, { methodName, params } = {}) => {try {const fun = edge.func({// 调用方法名methodName,// dll路径assemblyFile: '路径',//命名空间和类名typeName: 'PdfStaticViewer.PdfStaticViewer'});console.log('dll loaded successfully');// 等待 Promise 解决并返回结果const result = await fun(params);console.log('result:', result);return result;} catch (error) {console.error('Error invoking remote method:', error);throw error; // 或者返回一个错误消息}
});
  1. 修改src/preload.js
const { contextBridge, ipcRenderer } = require('electron');// 使用 contextBridge 暴露 API
contextBridge.exposeInMainWorld('electron', {invoke: (channel, ...args) => ipcRenderer.invoke(channel, ...args)
});
  1. 修改src/App.vue
    注意这里用了element-plus,自行引入一下
<template><div><el-button type="primary" @click="onClick">调用CA</el-button></div>
</template><script setup>const onClick = () => {window.electron.invoke('dllTest', {methodName: 'SayHi',params: '你好'});};
</script>

运行项目就可以看到效果了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/73395.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

20222311 2024-2025-1 《网络与系统攻防技术》实验二实验报告

一、实验内容 1.实验目标 (1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定) PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程 (2)使用socat获取主机操作Shell, 任务计划启动 (3)使用MSF meterpreter(或其他软件)生成可执行文件(后…

2024-2025-1 20241407《计算机基础与程序设计》第四周学习总结

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第四周作业这个作业的目标 学习门电路,组合电路,逻辑电路,冯诺依曼结构,CPU,内存,IO管理,嵌入式系统,并行结构,物理安全作业正文 https://www.cnblogs.com/…

并发请求太多,服务器崩溃了?试试使用 ASP.NET Core Web API 操作筛选器对请求进行限流

请求限流(Rate Limiting)主要是一种用于控制客户端对服务器的请求频率的机制。其目的是限制客户端在一定时间内可以发送的请求数量,保护服务器免受过多请求的影响,确保系统的稳定性和可靠性。本文主要讲述 ASP.NET Core Web API 如何使用操作筛选器对请求进行限流前言 请求…

10.18 J 组模拟赛*2

上午 “J”组模拟赛 T1:一维围棋 题面 赛时:100 很简单的一道入门题,注意特判int n;char a[105];void init(){cin >> n;for (int i = 1; i <= n; i++)cin >> a[i];int mx = 0;for (int i = 1; i <= n; i++){if (a[i] == .){int lb = 0, rb = 0;for (int j …

AI人员打闹监测识别系统

AI人员打闹监测识别系统通过在校园、工厂和监狱场景部署高清摄像设备,AI人员打闹监测识别系统采集相关视频图像,并通过人工智能视觉算法对图像进行分析和识别。AI人员打闹监测识别系统能够准确判断出是否有人员进行打闹行为,包括学生打闹和工厂或监狱场景中的人员打架斗殴等…

强化学习的数学原理-01基本概念

state:\(The \quad status \quad of \quad agent \quad with \quad respect \quad to \quad the \quad environment\) (agent 相对于环境的状态) 对于下面的网格地图来说:\(state\)就相当于$ location $,用 \(s_1、s_2、...、s_9\)来表示state space:\(The \quad set…

煤矿监管电子封条

煤矿监管电子封条系统通过视频监控和图像分析技术,煤矿监管电子封条能够实时监测矿井各个关键位置的情况。当有人员进出或人数发生变化时,煤矿监管电子封条能够自动识别,并记录下相关信息。同时,煤矿监管电子封条还能够监测设备的开停情况,及时发现异常和故障,以便及时处…

keil 快捷键设置,开发加速的小技巧(个人设置)

点击扳手,选择shortcut key进入快捷键设置页面跳到上一个光标的位置跳到下一个光标的位置跳转到定义(没办法实现组合鼠标按键,F12又太远,不过和QQ的截图热键冲突,需要修改QQ的快捷键,各有取舍吧)跳转到声明