找回密码
 立即注册

QQ登录

只需一步,快速开始

沉浮

注册会员

28

主题

50

帖子

198

积分

注册会员

积分
198
沉浮
注册会员   /  发表于:2024-3-11 13:51  /   查看:1443  /  回复:1
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 个回复

倒序浏览
最佳答案
最佳答案
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2024-3-11 13:51:01
来自 2#
您好,目前来说可能还是得方案二,调用本地的服务会简单一些,或者其他大佬还有什么好的方案吗,楼主也可以在产品需求版块中发个帖子,后续会有专门负责这个板块的技术人员,对这些需求进行整理和评估哈~感谢您的支持呢~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部