加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
main.js 3.39 KB
一键复制 编辑 原始数据 按行查看 历史
zaojian.dzj 提交于 2022-11-15 11:46 . 1.调用C#DLL文件
// Modules to control application life and create native browser window
const { app, BrowserWindow } = require('electron')
const path = require('path')
// const myChildProccess = require('child_process')
// myChildProccess.spawn('D:\\Notepad++\\notepad++.exe')
function createWindow() {
// Create the browser window.
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
// autoHideMenuBar: true,//可以使用户在打开软件时隐藏菜单栏,但是如果用户按下alt按键,菜单栏又会弹出来
webPreferences: {
//解决electron require未定义,以下两项
//是否注入nodeapi
nodeIntegration: true,//nodeIntegration设为false页面就不能使用nodejs和Electron APIs
contextIsolation: false,
//渲染进程是否启用remote模块
enableRemoteModule: true,//在渲染进程中使用主进程中的模块方法时,可以使用Electron Remote解决在渲染和主进程间的通讯,这么看 remote 模块可以说是非常好用啦,渲染进程就不用显式通过 ipcRenderer / ipcMain 与主进程通信。除此之外,可以通过 remote.getGlobal 获取主进程中 的全局变量, 通过 remote.process 拿到主进程的 process 对象信息
preload: path.join(__dirname, './preload.js')
}
})
// and load the index.html of the app.
mainWindow.loadFile('index.html')
// Open the DevTools.
mainWindow.webContents.openDevTools()
}
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
createWindow()
app.on('activate', function () {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})
console.log("start");
//监听消息,关闭子进程
const ipcMain = require('electron').ipcMain;
// 打开一个子进程
const childProcess = require('child_process');
var mySpawn = [];
// 收到消息打开进程
ipcMain.on('open-child-now', (e, msg) => {
console.log('打开进程 --》 mainProcessGet: ' + msg);
var spawn = childProcess.spawn(msg);
mySpawn[mySpawn.length] = spawn;
e.sender.send('cs-reply', '打开进程:' + msg);
})
ipcMain.on('kill-child-now', (e, msg) => {
console.log('关闭进程 --》 mainProcessGet: ' + msg);
e.sender.send('cs-reply', '正在关闭所有打开的应用');
//收到消息,关闭所有进程
for (i = 0; i < mySpawn.length; i++) {
mySpawn[i].kill();
}
mySpawn = [];
})
// const edge = require('edge-js')
const edge = require('electron-edge-js')
var invoker = edge.func({
assemblyFile: path.resolve("./static/dll/dllDemo.dll"),//找到对应的dll文件
typeName: "dllDemo.Test",// C#中class的名字就是StartUp
// typeName: "RexLibray.Util.StringUtil",// C#中class的名字就是StartUp
methodName: "Add"// 导出dll的方法名
})
invoker(12,function (err, result) {
if (err) throw err;
console.log(result + "");
})
const ffi = require('ffi-napi')
let cpplib = path.resolve('./static/dll/C++DLL.dll')
let cppDll = ffi.Library(cpplib, {
Add: ['float', ['float', 'float']],
Hello: ['String', []]
})
console.log(cppDll.Add(1, 2));
console.log(cppDll.Hello());
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化