调用.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程序作为子进程运行的更多相关文章

  1. 64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考

    最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的 ...

  2. Electron调用C++的DLL

    1. 安装ffi-napi npm install ffi-napi   2. c++ dll 注意,若electron是X64的,则dll也应为X64,同理32位. myAddDll是c++的dll ...

  3. electron调用c#动态库

    electron调用c#动态库 新建C#动态库 方法要以异步任务的方式,可以直接包装,也可以写成天然异步 代码如下 public class Class1 { public async Task< ...

  4. 调用Interop.zkemkeeper.dll无法使用解决方案

    调用Interop.zkemkeeper.dll无法使用 已经注册dll成功但是还是报错 检索 COM 类工厂中 CLSID 为 {00853A19-BD51-419B--2DABE57EB61F} ...

  5. 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 ...

  6. Node调用C++(dll)

    最近开始搞毕设了,打算用自己拿手的js来搞,但是仿佛入坑了,Node还不是很熟.总之,兵来将挡,水来土掩嘛,带着问题学习才是最高效的. 折腾1:Node 调用 C++ 刚开始,虽然我老师把dll文件给 ...

  7. golang调用c++的dll库文件

    最近使用golang调用c++的dll库文件,简单了解了一下,特作此笔记:一.DLL 的编制与具体的编程语言及编译器无关 dll分com的dll和动态dll,Com组件dll:不管是何种语言写的都可以 ...

  8. vs2010下C++调用lib或dll文件

    注: DLL:表示链接库,包含dll,lib文件: dll: 表示my.dll文件 lib: 表示my.lib文件 C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法 1  设置工程的 ...

  9. 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 来 ...

随机推荐

  1. Java对象构成所有Java应用程序的基础

    通过在优锐课的ange交流下,掌握了很多编程思想方法 特来分享 对象具有状态和行为 Java中的对象以及其他任何``面向对象''语言都是所有Java应用程序的基本组成部分,代表了你可能在你周围找到的任 ...

  2. ssh: connect to git@gitlab.xxxxx.com:xxxxx.git port 22: Connection refused

    公司服务器上的gitlab项目添加了ssh密钥,但是操作时却报错ssh: connect to git@gitlab.xxxxx.com:xxxxx.git port 22: Connection r ...

  3. css公共

    @charset "utf-8"; /* CSS Document */ *{ padding:; margin:; } ul,li{ list-style: none; } a{ ...

  4. C++-POJ1017-Packets

    贪心算法,思路见代码 本来想搜索,结果有O(1)的算法,我佛了 其实每一种6x6的方案可以打表预处理,然后dp or search 但是既然可以贪心何乐而不为呢? #include <set&g ...

  5. js bug

    1 加载模块脚本失败:服务器以非JavaScript MIME类型“text/html”响应. 描述:ES6 import Class时路径出错,少一个 / ,添上即可

  6. 题解【洛谷P1645/CJOJ1244】序列

    P1645 序列 Description 有一个整数序列,它的每个数各不相同,我们不知道它的长度(即整数个数),但我们知道在某些区间中至少有多少个整数,用区间(Li,Ri,Ci)来描述,表示这个整数序 ...

  7. 马俊龙ansible教程分享

    ansible详细介绍和教程链接:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#ansible

  8. 2019牛客多校第三场H Magic Line 思维

    Magic Line 题意 给出n(偶)个整点 整点范围1000,找出一条直线,把n个点分成均等的两部分 分析 因为都是整数,并且范围比较小,所以直接按x排序找到在中间那一部分,并且把中间那一部分的点 ...

  9. Codeforces Round #530 (Div. 2) D. Sum in the tree 树上贪心

    D. Sum in the tree 题意 给出一颗树,奇数层数的点有值,值代表从1到该点的简单路的权值的和,偶数层数的点权值被擦去了 问所有节点的和的最小可能是多少 思路 对于每一个-1(也就是值未 ...

  10. git 提交的时候 建立排除文件夹或者文件

    1.在Git的根仓库下 touch .gitignore 2.编辑这个文件