找回密码
 立即注册

QQ登录

只需一步,快速开始

沉浮

注册会员

28

主题

50

帖子

198

积分

注册会员

积分
198
沉浮
注册会员   /  发表于:2024-3-15 08:32  /   查看:470  /  回复:1
第三方是一个DLL 动态链接库,主要功能就是本地读卡功能,例如:社保卡信息、身份证信息。客户端如何调用?或者有什么其他解决思路。DLL是第三方提供的无法修改。这是一个2021年的老帖子,倒是给了解决办法了(下文),但是我感觉这个办法有些繁琐,并不是很友好,2年过去了官方也没有解决方案,希望能在后续版本中考虑这块功能。浏览器与客户端电脑交互问题。

下面是引用别人的帖子的内容:
原贴地址:https://gcdn.grapecity.com.cn/showtopic-99362-1-1.html

一、 有部分场景浏览器是无法调用本地DLL,然而DLL还不能在服务端进行加载调用,只能到客户端下执行。
二、 解决思路就是首先需要会写窗口(winform)程序,通过窗口程序进行加载DLL 进行方法的调用。同时窗口程序相当于一个服务程序,在客户端启动的同时,运行一个websocket 服务,
   winform 服务端简化代码  C#  fleck  websocket 服务端 代码

dic_Sockets  = new Dictionary<string, IWebSocketConnection>();
                        server  = new WebSocketServer("ws://127.0.0.1:8887");//监听所有的的地址
                        server.RestartAfterListenError = true;
                        server.Start(socket =>
                        {
                            socket.OnOpen = () =>   //连接建立事件
                             {
                                 //获取客户端网页的url
                                  string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
                                 if (dic_Sockets.Count < clientCountLimit)
                                 {
                                          dic_Sockets.Add(clientUrl, socket);
                                            Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 建立WebSock连接!");
                              
                               };
                                 socket.OnClose = () =>  //连接关闭事件
                                 {
                                     string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
                                     //如果存在这个客户端,那么对这个socket进行移除
                                     if (dic_Sockets.ContainsKey(clientUrl))
                                     {
                                         dic_Sockets.Remove(clientUrl);
                                     }
                                     Console.WriteLine(DateTime.Now.ToString() + "|服务器:和客户端网页:" + clientUrl + " 断开WebSock连接!");
                                 };
                                 socket.OnMessage = message =>  //接受客户端网页消息事件
                                 {
                                     string clientUrl = socket.ConnectionInfo.ClientIpAddress + ":" + socket.ConnectionInfo.ClientPort;
                                     Console.WriteLine(DateTime.Now.ToString() + "|服务器:【收到】来客户端网页:" + clientUrl + "的信息:\n" + message);
                                    
                                 };
                        });
活字格页面  websocket 客户端

添加一个按钮,在按钮上添加JavaScript 命令
var wsImpl = window.WebSocket || window.MozWebSocket;
window.ws = new wsImpl('ws://127.0.0.1:8887/111');
var page = Forguncy.Page;
var txt = page.getCell("txt");
ws.onmessage = function (evt) {
    var str = txt.getValue();
    txt.setValue(str+"收到服务器消息: "+evt.data+"\r\n");   
};
ws.onopen = function () {
   page.getCell("txt").setValue("open server...\r\n");
};
ws.onclose = function () {
   var str = txt.getValue();
   txt.setValue(str+"close...\r\n");
}
建立连接,
在添加一个发送消息按钮,同时编写JavaScript 命令
var senddata = {code: 0, command: "xxx"};
var message = JSON.stringify(senddata);
console.log(message );
ws.send(message );

浏览器向窗口服务发送消息,
服务端接收消息,解析  command 命令

执行相应的命令调用本地的DLL 将返回结果回传给浏览器。

1 个回复

倒序浏览
Patrick.Zhu
银牌会员   /  发表于:2024-3-19 17:23:24
沙发
关于具体的实现方案,你可以在求助中心看看有没有大佬帮你想象办法。
如果是讨论产品功能,我们聊一聊你想干什么实现什么效果,先不考虑具体的细节,说不定有别的方法来实现
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部