前一段时间有个朋友要帮忙做一个在web端调用硬件的sdk。沟通后才知道是买的供应商的一套视频设备。由于视频设备的软件和sdk只有c++版的,于是给他们中间做了一层c# 封装。技术方案呢开始时想用ocx 插件来做。后来觉得后期给客户安装比较麻烦,后面改成了websocket 来做。
websocket c#端采用 Fleck 来接收和发送报文。
工程类型可以采用winform 、控制台或者window服务都可以
我这里就用winform 做个介绍
首先创建一个winform 工程解决方案
NuGet程序包管理器下载Fleck即可
由于要用到转json所以也下了Newtonsoft.Json
c# 端实现的是一个 调用c++的接口函数 拍照。拍照固定保存到电脑硬盘地址。调用完成之后c# 返回文件地址给到前端去显示。
调用c++接口函数
private const string dllPath = @"WinDLL.dll";
[DllImport(dllPath, EntryPoint = "DrawGraph", CallingConvention = CallingConvention.Cdecl)]
public unsafe static extern int DrawGraph(int width, int height, IntPtr mhwnd);
websocket 端口号可以自己定,我这里是8181
WebSocketServer server = new WebSocketServer("ws://0.0.0.0:8181");
接下来在构造函数里开启socket服务
StartWebSocket();
Socket 接收到消息后解析数据,根据数据命令判断执行接口,这里是调用c++拍照后画图显示。图像保存到本地后回传给网页端。当然这里也可以上传到云端服务器都可以。
server.Start(socket =>
{
socket.OnOpen = () =>
{