Electron调用.Net的Dll以及将.Net程序作为子进程运行
调用.Net Dll
const edge = require('electron-edge-js');
var testDll = edge.func({
assemblyFile: "./dll/electronedge.dll",
typeName: "electronedge.MQ",
methodName: "Invoke"
});
window.setInterval(heartbeat, 100);
var indexOption=0;
function heartbeat(){
testDll("测试消息 "+indexOption,(err,value)=>{
var selectObj=document.getElementById("list");
selectObj.options[indexOption] = new Option(value, indexOption);
selectObj.selectedIndex = indexOption;
indexOption++;
var num = parseInt(value.substr(value.indexOf("测试消息 ")).replace(/测试消息 /,""));
//alert(num);
if(num != 0 && num % 5 == 0 && num % 7 == 0 && num<106)
{
//document.getElementById("Open1").click();
var OpenWindow = new BrowserWindow ({frame:true,fullscreen:false,x:0,y:0,webPreferences: {nodeIntegration: true}})
OpenWindow.webContents.openDevTools();
OpenWindow.loadURL('file://' + __dirname + '/MQ.html');
OpenWindow.on("close", function(){
OpenWindow = null;
})
var webContents = OpenWindow.webContents;
webContents.on('dom-ready',function(){
//MQjs是MQ.html中的js函数
webContents.executeJavaScript('MQjs('+num+');');
});
}
});
}
子进程及通信
const spawn = require('child_process').spawn;
var childProcess = spawn('./dll/MQConsole.exe', ['参数1',1234]);
var OpenWindowA = new BrowserWindow ({frame:true,fullscreen:false,x:0,y:0,webPreferences: {nodeIntegration: true}})
//OpenWindowA.webContents.openDevTools();
OpenWindowA.loadURL('file://' + __dirname + '/MQ.html');
OpenWindowA.on("close", function(){
OpenWindowA = null;
});
var webContentsA = OpenWindowA.webContents;
childProcess.stdout.on('data', (data) => {
var msgStr;
if(data.toString().indexOf("WinA:")){
msgStr = "中国:"+data.toString();
webContentsA.executeJavaScript("MQjs('"+ msgStr.replace(/[\r\n]/g,"") + "');");
}
else if(data.toString().indexOf("WinB:")){
msgStr = "美国:"+data.toString();
webContentsB.executeJavaScript("MQjs('"+ msgStr.replace(/[\r\n]/g,"") + "');");
}
else{
msgStr = "日本:"+data.toString();
}
selectObj.options[indexOption] = new Option(msgStr, indexOption);
selectObj.selectedIndex = indexOption;
indexOption++;
});
MQConsole.exe代码
namespace MQConsole
{
class Program
{
static void Main(string[] args)
{
long num = ;
Console.OutputEncoding = Encoding.UTF8;
while (true)
{
if(num % ==)
Console.WriteLine($"WinA:{num}");
else
Console.WriteLine($"WinB:{num}");
num++;
Thread.Sleep();
}
}
}
}
electronedge.dll代码
namespace electronedge
{
public class MQ
{
public async Task<object> Invoke(object input)
{
return Helper.Send(input.ToString());
} public async Task<object> InvokeScreen(object id)
{
return Helper.SendScreen(id.ToString());
} //public async Task<object> InitMQ(object input)
//{
// return Helper.InitMQ();
//} //public async Task<object> GetMQMsg(string id)
//{
// return Helper.GetMQMsg(id);
//}
} static class Helper
{
static string RealData = "";
static Mutex mutex = new Mutex(false);
public static string Send(string msg)
{
return $"来自dll : {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")} {msg}";
}
public static string SendScreen(string id)
{
return $"来自{id} : {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}";
} //public static object InitMQ()
//{
// Thread threadMQ = new Thread(new ThreadStart(RunMQ));
// threadMQ.Start(); // return null;
//} //private static void RunMQ()
//{
// mutex.WaitOne();
// RealData = DateTime.Now.Ticks.ToString();
// mutex.ReleaseMutex();
//} //public static string GetMQMsg(string id)
//{
// return RealData + "来自ID:" + id;
//}
}
}
完整代码
Electron调用.Net的Dll以及将.Net程序作为子进程运行的更多相关文章
- 64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考
最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的 ...
- Electron调用C++的DLL
1. 安装ffi-napi npm install ffi-napi 2. c++ dll 注意,若electron是X64的,则dll也应为X64,同理32位. myAddDll是c++的dll ...
- electron调用c#动态库
electron调用c#动态库 新建C#动态库 方法要以异步任务的方式,可以直接包装,也可以写成天然异步 代码如下 public class Class1 { public async Task< ...
- 调用Interop.zkemkeeper.dll无法使用解决方案
调用Interop.zkemkeeper.dll无法使用 已经注册dll成功但是还是报错 检索 COM 类工厂中 CLSID 为 {00853A19-BD51-419B--2DABE57EB61F} ...
- c# 传递Null的string值导致的调用C++的dll报错 Attempted to read or write protected memory.
c# 调用C++的dll报错 Attempted to read or write protected memory: 原因是:c# 传递Null的string值导致的,将Null改为string ...
- Node调用C++(dll)
最近开始搞毕设了,打算用自己拿手的js来搞,但是仿佛入坑了,Node还不是很熟.总之,兵来将挡,水来土掩嘛,带着问题学习才是最高效的. 折腾1:Node 调用 C++ 刚开始,虽然我老师把dll文件给 ...
- golang调用c++的dll库文件
最近使用golang调用c++的dll库文件,简单了解了一下,特作此笔记:一.DLL 的编制与具体的编程语言及编译器无关 dll分com的dll和动态dll,Com组件dll:不管是何种语言写的都可以 ...
- vs2010下C++调用lib或dll文件
注: DLL:表示链接库,包含dll,lib文件: dll: 表示my.dll文件 lib: 表示my.lib文件 C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法 1 设置工程的 ...
- paip.java c# .net php python调用c++ c dll so windows api 总结
paip.java c# .net php python调用c++ c dll so windows api 总结 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来 ...
随机推荐
- Python记:列表方法略记
- 【转】mathnet 使用方法介绍
转载自:http://blog.csdn.net/c914620529/article/details/50393223 在C#中使用mathnet,需要利用using引入相关类 矩阵运算的相关类: ...
- LitElement(一)概述
1.一些感悟 自从踏入编程领域开始,从html,css,JavaScript,jQuery,bootstrap开始接触前端,经常用NodeJS,ejs等模板语言来写个简单的页面,感觉蛮简单的,也不怎么 ...
- JS高级---函数作为返回值使用拓展,排序
函数作为返回值使用拓展,排序 排序, 每个文件都有名字,大小,时间,都可以按照某个属性的值进行排序 函数作为返回值 函数作为参数 //排序,每个文件都有名字,大小,时间,都可以按照某个属性的值进行排序 ...
- python之路之生成器和的迭代器
生成器的基本原理 生成器实现xrange 迭代器
- UNION JOIN 连接表
使用UNION JOIN进行多表连接,与9.3节介绍的各种表的连接类型不同,它并不对表中的数据进行任何匹配处理,而只是把来自一个源表中的行与另一个源表中的行联合起来,生成的结果表中包括第一个表中的所有 ...
- python UI自动化生成BeautifulReport测试报告并保存截图
前面已经写过利用BeautifulReport生成测试报告,那么接下来讲讲如何在测试报告里面保存截图 首先需要在测试用例中定义一个截图的方法: # 截图方法 """ os ...
- Servlet文件上传下载
今天我们来学习Servlet文件上传下载 Servlet文件上传主要是使用了ServletInputStream读取流的方法,其读取方法与普通的文件流相同. 一.文件上传相关原理 第一步,构建一个up ...
- MAKEFILE_LIST/CURDIR/MAKECMDGOALS/MAKEOVERRIDES/MAKEFLAGS
http://blog.chinaunix.net/uid-29460203-id-4191975.html https://www.xuebuyuan.com/1148403.html?mobile ...
- 【转载】Hadoop自定义RecordReader
转自:http://www.linuxidc.com/Linux/2012-04/57831.htm 系统默认的LineRecordReader是按照每行的偏移量做为map输出时的key值,每行的内容 ...