Electron学习笔记01(electron环境和调⽤C#)⼀、Eelectron简介
⼆、环境配置
三、搭建项⽬
四、调⽤C#代码
var helloWorld = edge.func(`
async (input) => {
return "Hellow world " + input.ToString();
}
`)
再在createWindow ()⽅法⾥调⽤这个C#代码
helloWorld('JavaScript',function(error, result){
if(error)throw error
console.log(result)
})
具体如下图
最后输⼊yarn run dev运⾏项⽬,但会报如下错误
说这个edge模块不是对应node.js 10.2
这时我们可以安装electron-edge的兼容版 electron-edge-js
输⼊yarn remove electron-edge移除它
输⼊yarn add electron-edge-js安装兼容版
把代码var edge = require('electron-edge')改为var edge = require('electron-edge-js')
输⼊yarn run dev运⾏项⽬后在终端打印出了Hello world JavaScript
五、调⽤C# dll
打开VS2017新建⼀个项⽬,添加⼀个net standard2.0的类库ClassLibrary1,再添加⼀个net framework 4.6的类库ClassLibrary2,项⽬结构如下图
Class1的代码如下:
using System.Threading.Tasks;
namespace ClassLibrary1
{
public class Class1
{
//electron-edge规定暴露给它的⽅法必须是Func<object,Task<object>>
public async Task<object>Add(object input)
electron vue教程{
int v =(int)input;
return AddSeven(v);
}
private static int AddSeven(int v)
{
return v +7;
}
}
}
Person的代码如下:
namespace ClassLibrary2
{
public class Person
{
public int anInteger =1;
public double aNumber =3.1415;
public string aString ="foo";
public bool aBoolean =true;
public byte[] aBuffer =new byte[10];
public object[] anArray =new object[]{1,"foo"};
public object anObject =new{ a ="foo", b =12};
}
}
Class2的代码如下:
using System.Threading.Tasks;
namespace ClassLibrary2
{
public class Class2
{
//electron-edge规定暴露给它的⽅法必须是Func<object,Task<object>>
public async Task<object>GetPerson(dynamic input)
{
Person person =new Person();
return person;
}
}
}
编译项⽬,把ClassLibrary1.dll和ClassLibrary2.dll复制到electron项⽬的static⽬录⾥编辑src/main/index.js⽂件
先引⼊(需要⽤到这个路径操作的功能)
import path from'path'
v.NODE_ENV!=='development'){
global.__static =require('path').join(__dirname,'/static').replace(/\\/g,'\\\\')
}
这段代码后添加两个⽅法(因为要⽤到__static)
let add = edge.func({
assemblyFile: path.join(__static,'ClassLibrary1.dll'),  typeName:'ClassLibrary1.Class1',
methodName:'Add'
})
let getPerson = edge.func({
assemblyFile: path.join(__static,'ClassLibrary2.dll'),  typeName:'ClassLibrary2.Class2',
methodName:'GetPerson'
})
然后就在createWindow()⽅法⾥调⽤吧
add(3,function(error, result){
if(error)throw error
console.log(result)
})
getPerson(null,function(error, result){
if(error)throw error
console.log(result)
})
最后运⾏项⽬,在终端可看到打印出了调⽤的结果。
结果如下图
六、调式C# 代码
(2020年3⽉新增)修改代码,在SystemInformation.vue中写⼊如图所⽰代码,表⽰从渲染进进程⾥去调⽤主进程⾥的⽅法

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。