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

本文介绍如何通过EdgeJS在Web前端JavaScript中与C# DLL进行交互,实现函数调用。提供了C#代码示例,创建了一个NetWebSocket抽象类及其子类MyNetWebSocketImpl,并在NodeJS端使用WebSocket与C# DLL通信,实现了数据的发送和接收。
摘要由CSDN通过智能技术生成

我做到了解决方案是使用

EdgeJS作为NodeJS V8和C#CLR之间的桥梁. Edge加载DLL并在V8和CLR之间创建通信通道,消息是Func< object,Task< object>>形式的函数.或在每个语言VM之间编组的函数(有效负载,回调).

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

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 () { /*

var ws = new WebSocket('ws://' + window.document.location.host);

ws.onmessage = function (event) {

console.log(event.data);

var div = document.getElementById('jsonOutput');

div.innerHTML = event.data;

}

ws.onopen = function (event) {

// send something to the server

ws.send('I am the client from the browser calling you, the NodeJS WebSocketServer!');

}

ws.onclose = function (event) {

alert('websocket closing');

}

window.onbeforeunload = function myonbeforeUnload() {

return "Are you sure?";

}

window.onunload = function myonunload() {

confirm('Are you really sure?');

ws.close();

return "Are you really sure?";

}

*/}).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;

})();

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

快乐的编码!

[别听那些反对者!]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值