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 hashlib 详解
1.概述 摘要算法简介 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定 ...
- Hydra暴力破解工具
hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FILE [- ...
- C# 获取变量的指针(IntPtr)
1. 获取数组的指针(IntPtr) 通过Marshal.UnsafeAddrOfPinnedArrayElement(Array,Int32)方法获得一个数组的第某个元素的内存地址. Array是 ...
- MYSQL入门总结
创建数据库及创建表 create schema/database ttest(名字); //创建数据库 create table ttest(建好的数据库名字).new_table(表名字) ( a ...
- RS-232C
RS-232C标准(协议)的全称是EIA-RS-232C标准,定义是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准".它是在1970年由美国电子 ...
- 根据wsdl生成soap请求格式
本文链接:https://blog.csdn.net/a_Little_pumpkin/article/details/84725118根据wsdl文件如何生成soap请求的格式呢?使用最方便的工具S ...
- ASP.NET + MVC5 入门完整教程三 (下) ---MVC 松耦合
建立松耦合组件 MVC 模式最重要的特性之一视他支持关注分离,希望应用程序中的组件尽可能独立,只有很少的几个可控依赖项.在理想的情况下,每个组件都不了解其他组件,而只是通过抽象接口来处理应用程序的其他 ...
- 2. 移动端测试工具 :bugtags
http://blog.csdn.net/objectivepla/article/details/51037804 Bugtags 使用说明 https://www.bugtags.com/ ...
- 题解【洛谷P2002】消息扩散
题面 题解 \(Tarjan\)裸题. \(Tarjan\)缩点后统计入度为\(0\)的强连通分量个数,输出即可. 代码 #include <iostream> #include < ...
- python项目虚拟环境搭建
一. 虚拟环境搭建目的 一个项目一个环境,防止各个项目互相干扰,项目更加简洁,利于打包.... 二.使用 pip install virtualenv 安装 创建虚拟环境 cd my_project_ ...