Electron调用C#类库dll
新建vue项目
PowerShell 全选
vue ui安装插件 vue-cli-plugin-electron-builder

安装完成后:

C#类库代码
- 定义的方法必须是:public async Task<object> MyMethod(dynamic input)
 - 如果输入参数为对象,需要用动态对象接收
dynamic不然,会报错。类型转换失败 
 定义的方法必须是:public async Task MyMethod(dynamic input)
- 首先,这里的返回值必须是Task,不能是Task或者Task或者其他的什么,否则会报错。
 - 其次,参数数量只能是1个。不能写多个参数
 - 再次,参数如果是简单类型,例如int,string是可以的。但是当参数类型是自定义的类型,那么方法参数必须写dynamic 类型。不能是其他类型。即使是写成object也不行。也会报错
 
C# 全选
using System;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace YESWEB.Electron.PrintServer
{
    public class Test
    {
        /// <summary>
        /// 测试,调用winform弹窗
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public async Task<object> ShowWarning(object message)
        {
            return await Task.Run(() =>
             {
                 MessageBox.Show(message.ToString(), "提醒", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
                 return "调用成功";
             });
        }
        /// <summary>
        /// 测试1
        /// </summary>
        /// <param name="data">字符串数组</param>
        /// <returns>字符串</returns>
        public async Task<object> Test01(string[] data)
        {
            return await Task.Run(() => { return String.Join(",", data); });
        }
        public class P_Test3
        {
            public string Name { get; set; }
            public string Description { get; set; }
        }
        /// <summary>
        /// 测试2
        /// </summary>
        /// <param name="data">对象,必须是dynamic方式接收</param>
        /// <returns>字符串</returns>
        public async Task<object> Test02(dynamic input)
        {
            return await Task.Run(() => { return input.Name + ":" + input.Description; });
        }
        /// <summary>
        /// 测试3
        /// </summary>
        /// <param name="input">对象,必须是dynamic方式接收</param>
        /// <returns>对象</returns>
        public async Task<object> Test03(dynamic input)
        {
            return await Task.Run(() => { return input; });
        }
    }
}调用dll
dll复制到项目目录 public/dll 目录中

导入:
JavaScript 全选
import edge from 'electron-edge-js'调用方法
JavaScript 全选
testShowWarning () {
  const ShowWarning = edge.func({
	assemblyFile: 'public/dll/YESWEB.Electron.PrintServer.dll',
	typeName: "YESWEB.Electron.PrintServer.Test",
	methodName: "ShowWarning"
  })
  ShowWarning('Hello Electron', (error, value) => {
	console.log(error, value)
  })
}
参考:
vue+Electron开发桌面应用 - https://zhuanlan.zhihu.com/p/228691869
Electron edge.js配置-YES开发框架网 (yesdotnet.com)
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
post 张国生  
 

