从前端javascript中加载的DLL中调用函数(在clientside javascript中加载dll)

我有一个简单的客户端JavaScript应用程序。 我希望它加载DLL文件(对于SwipeReader CR100)并从javascript代码中调用DLL库中的函数。 第二种是向SwipeReader触发的事件添加侦听器,如DocumentRead或DocumentReadError,并在javascript中处理它们。

所以,我有4个小问题需要解决:

  1. 在javascript(主要是Chrome V8引擎)中加载DLL。
  2. DLL中的调用函数。
  3. 将侦听器添加到DLL中触发的事件。
  4. 在回调中使用响应对象在JS中执行某些操作(alert,console.log数据)

有没有人这样做过,或者这甚至可能吗?

谢谢你,丹尼尔。

我做到了 解决方案是使用EdgeJS作为NodeJS V8和C#CLR之间的桥梁。 Edge加载DLL并在V8和CLR之间创建通信通道,消息是在每个语言VM之间编组的Func>function(payload, callback)forms的function(payload, callback)

我将在下面发布代码示例:
C#

 public abstract class NetWebSocket { private Func> SendImpl { get; set; } protected NetWebSocket(Func> sendImpl) { this.SendImpl = sendImpl; } protected abstract Task ReceiveAsync(string message); public Func> ReceiveImpl { get { return async (input) => { Console.Out.WriteLine(input); await this.ReceiveAsync((string) input); return Task.FromResult(null); }; } } protected async Task SendAsync(string message) { await this.SendImpl(message); return; } } public class MyNetWebSocketImpl : NetWebSocket { public CHello module; private string JSONCodelineDataRepr = "not set"; public MyNetWebSocketImpl(Func> sendImpl) : base(sendImpl) { // do other stuff after calling the super class constructor module = new CHello(); module.DocumentReadEvent += this.DocumentReadEventHandler; module.DocumentReadErrorEvent += this.DocumentReadErrorEventHandler; // uncomment after the websocket communication works module.Start(); } protected override async Task ReceiveAsync(string message) { // not really needed because only the NodeJS Server listens to C# .NET Server messages Console.WriteLine(message); if (message.Equals("shutdown")) { module.Close(); } // not necessary (can comment the send function call) // if I eventually receive a message, respond with the JSON representation of the Patient ID Card await this.SendAsync("I received a message from you, but I'll ignore it and send you the Patient" + " ID Card Data instead.. I'm a fish, so start phishing! PersonData = " + JSONCodelineDataRepr); return; } private async void DocumentReadEventHandler(string args) { this.JSONCodelineDataRepr = args; await this.SendAsync(args); } private async void DocumentReadErrorEventHandler(string args) { await this.SendAsync(args); } } public class Startup { public static MyNetWebSocketImpl ws; public async Task Invoke(Func> sendImpl) { ws = new MyNetWebSocketImpl(sendImpl); return ws.ReceiveImpl; } } 

使用Javascript /的NodeJS

 (function(e,d,g,e){ var edge = require('edge'), http = require('http'), WebSocketServer = require('ws').Server, swipe = edge.func('./dlls/ActiveXCOM.dll'); var server = http.createServer(function(req,res){ res.writeHead(200, {'Content-Type' : 'text/html'}); res.end(( function () { /*      
*/}).toString().match(/[^]*\/\*([^]*)\*\/\}$/)[1]); }); var wss = new WebSocketServer({server: server}); wss.on('connection', function(ws) { var sendImpl = function (message, callback) { console.log(message); ws.send(message); callback(); }; var receiveHandler = swipe(sendImpl, true); ws.on('message', function (message) { receiveHandler(message); }); ws.on('close', function close(){ console.log('****************************The client disconnected!'); receiveHandler('shutdown'); delete receiveHandler; }); }); server.listen(process.env.PORT || 8080); module.exports = this; })();

我希望实施清楚。 如果您有任何理解,请不要犹豫,写信给我。

快乐的编码!

[别听那些反对者!]

从javascript代码中调用DLL库中的函数。

不能。您无法在JavaScript中加载DLL。

为什么?

JavaScript在浏览器的堆栈中执行。 要使任何可用的东西,您必须使用浏览器连接它,然后使其可访问; 太多的工作。

解决

您可以使用C#编写的客户端应用程序连接到JS websocket,然后传输数据。 WebSocket可以检查特定的数据块,并以您希望的方式处理它。

我按照我在使用指纹扫描仪的项目中描述的方式使用它。 效果很好! 如果你添加一点加密,甚至更好!