事情是这样的,有一台海康威视的摄像头,客户需要一个ActiveX控件嵌入到网页中,通过点击按钮开始录制和结束录制来进行视频的录制和保存,关于海康摄像头的二次开发在此就不多说了,可以参考SDK中的说明。

  直接上流程:

  1.开发环境:

    VS2010,这个打包方便,之前用VS2013打包的,总是调用不了,不知道原因是什么;SDK是32位的,用64位的在Winform中可以正常使用,在网页中使用控件时会报错。

  2.新建项目:

    新建一个类库项目,如下:

    右键点击项目,添加“用户控件”,如下:

    界面拖控件,如下:

    控件代码如下,其中Guid是“工具”->“创建GUID”自动生成的,#region->#endregion折叠部分是实现的IObjectSafety接口

using System;namespace VideoHelper
{[System.Security.SecuritySafeCritical]public class Videos{private bool m_initSDK = false;/// <summary>/// 正在录制/// </summary>private bool m_Record = false;private uint LastErr = 0;private Int32 m_RealHandle = -1;private Int32 m_lUserID = -1;public IntPtr handle { get; set; }public bool Initialize(string ip = "192.168.1.64", int port = 8000, string username = "admin", string password = "8910jqk#"){try{m_initSDK = CHCNetSDK.NET_DVR_Init();if (m_initSDK){CHCNetSDK.NET_DVR_SetLogToFile(3, "C:\\SdkLog\\", true);//设备参数结构体CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30();//注册设备m_lUserID = CHCNetSDK.NET_DVR_Login_V30(ip, port, username, password, ref DeviceInfo);return m_lUserID >= 0;}return false;}catch (Exception ex){System.Windows.Forms.MessageBox.Show("Initialize:" + ex.Message);return false;}}public bool Start(IntPtr handle, string filename){try{CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();lpPreviewInfo.lChannel = 1;lpPreviewInfo.dwLinkMode = 0;lpPreviewInfo.dwStreamType = 0;lpPreviewInfo.bBlocked = true;lpPreviewInfo.dwDisplayBufNum = 15;lpPreviewInfo.hPlayWnd = handle;IntPtr pUser = IntPtr.Zero;//new IntPtr();         //获取实时视频流m_RealHandle = CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null, pUser);if (m_Record == false){CHCNetSDK.NET_DVR_MakeKeyFrame(m_lUserID, 1);if (!CHCNetSDK.NET_DVR_SaveRealData(m_RealHandle, filename)){LastErr = CHCNetSDK.NET_DVR_GetLastError();return false;}else{m_Record = true;return true;}}else{return false;}}catch{return false;}}public bool End(){if (m_Record){if (!CHCNetSDK.NET_DVR_StopSaveRealData(m_RealHandle)){LastErr = CHCNetSDK.NET_DVR_GetLastError();return false;}m_Record = false;m_RealHandle = -1;return true;}else{return false;}}public void Dispose(){try{if (m_lUserID >= 0){CHCNetSDK.NET_DVR_Logout_V30(m_lUserID);m_lUserID = -1;}if (m_RealHandle >= 0){CHCNetSDK.NET_DVR_StopRealPlay(m_RealHandle);m_RealHandle = -1;}CHCNetSDK.NET_DVR_Cleanup();}catch{ }}}
}

using System;
using System.Runtime.InteropServices;namespace VideoHelper
{[ComImport, GuidAttribute("CB5BDC81-93C1-11CF-8F20-00805F2CD064")][InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]public interface IObjectSafety{[PreserveSig]int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions);[PreserveSig()]int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions);}
}

using System;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
namespace VideoHelper
{[System.Security.SecuritySafeCritical][Guid("79629620-3C0C-4D47-B93B-2D36AEF8EF31")]public partial class VideoControl : UserControl,IObjectSafety{public VideoControl(){InitializeComponent();}string videopath = Environment.CurrentDirectory;Videos video;IntPtr handle;private void btnLogin_Click(object sender, EventArgs e){if (btnLogin.Text == "登录"){try{if (string.IsNullOrWhiteSpace(this.txtIP.Text)){MessageBox.Show("IP地址不能为空!");return;}if (string.IsNullOrWhiteSpace(this.txtUserID.Text)){MessageBox.Show("用户名不能为空!");return;}if (string.IsNullOrWhiteSpace(this.txtPwd.Text)){MessageBox.Show("密码不能为空!");return;}video = new Videos();if (video.Initialize(this.txtIP.Text, Convert.ToInt32(this.numericUpDown1.Value), this.txtUserID.Text, this.txtPwd.Text)){this.btnLogin.Text = "注销";MessageBox.Show("登录成功!");this.btnStart.Enabled = true;this.btnSave.Enabled = true;}else{MessageBox.Show("登录失败!");}}catch (Exception ee){MessageBox.Show("登录异常:" + ee.Message);}}else if (btnLogin.Text == "注销"){try{video.Dispose();this.btnLogin.Text = "登录";this.btnStart.Enabled = false;this.btnSave.Enabled = false;}catch (Exception ee){MessageBox.Show("注销异常:" + ee.Message);}}}private void btnStart_Click(object sender, EventArgs e){try{string filename = txtFile.Text.Trim();if (filename.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0 || string.IsNullOrWhiteSpace(filename)){MessageBox.Show("文件名含有非法字符或空格,请重新输入");txtFile.Focus();return;}video.Start(handle, filename + comboBox1.SelectedItem.ToString());this.btnStart.Enabled = false;this.btnSave.Enabled = true;}catch (Exception ee){MessageBox.Show("异常:" + ee.Message);}}private void btnSave_Click(object sender, EventArgs e){try{if (video.End()){MessageBox.Show("视频已保存!");this.btnStart.Enabled = true;this.btnSave.Enabled = false;}else{MessageBox.Show("保存失败!");this.btnStart.Enabled = true;this.btnSave.Enabled = true;}}catch (Exception ee){ MessageBox.Show("异常:" + ee.Message); }}private void button1_Click(object sender, EventArgs e){try{System.Diagnostics.Process.Start(videopath);}catch{ }}private void VideoControl_Load(object sender, EventArgs e){this.comboBox1.SelectedItem = ".mp4";this.handle = pictureBox1.Handle;this.btnStart.Enabled = false;this.btnSave.Enabled = false;}#region IObjectSafety 成员private const string _IID_IDispatch = "{00020400-0000-0000-C000-000000000046}";private const string _IID_IDispatchEx = "{a6ef9860-c720-11d0-9337-00a0c90dcaa9}";private const string _IID_IPersistStorage = "{0000010A-0000-0000-C000-000000000046}";private const string _IID_IPersistStream = "{00000109-0000-0000-C000-000000000046}";private const string _IID_IPersistPropertyBag = "{37D84F60-42CB-11CE-8135-00AA004BB851}";private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001;private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002;private const int S_OK = 0;private const int E_FAIL = unchecked((int)0x80004005);private const int E_NOINTERFACE = unchecked((int)0x80004002);private bool _fSafeForScripting = true;private bool _fSafeForInitializing = true;public int GetInterfaceSafetyOptions(ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions){int Rslt = E_FAIL;string strGUID = riid.ToString("B");pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;switch (strGUID){case _IID_IDispatch:case _IID_IDispatchEx:Rslt = S_OK;pdwEnabledOptions = 0;if (_fSafeForScripting == true)pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;break;case _IID_IPersistStorage:case _IID_IPersistStream:case _IID_IPersistPropertyBag:Rslt = S_OK;pdwEnabledOptions = 0;if (_fSafeForInitializing == true)pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;break;default:Rslt = E_NOINTERFACE;break;}return Rslt;}public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions){int Rslt = E_FAIL;string strGUID = riid.ToString("B");switch (strGUID){case _IID_IDispatch:case _IID_IDispatchEx:if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_CALLER) && (_fSafeForScripting == true))Rslt = S_OK;break;case _IID_IPersistStorage:case _IID_IPersistStream:case _IID_IPersistPropertyBag:if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_DATA) && (_fSafeForInitializing == true))Rslt = S_OK;break;default:Rslt = E_NOINTERFACE;break;}return Rslt;}#endregion}
}

namespace VideoHelper
{partial class VideoControl{/// <summary> /// 必需的设计器变量。/// </summary>private System.ComponentModel.IContainer components = null;/// <summary> /// 清理所有正在使用的资源。/// </summary>/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>protected override void Dispose(bool disposing){if (disposing && (components != null)){components.Dispose();}base.Dispose(disposing);}#region 组件设计器生成的代码/// <summary> /// 设计器支持所需的方法 - 不要/// 使用代码编辑器修改此方法的内容。/// </summary>private void InitializeComponent(){this.button1 = new System.Windows.Forms.Button();this.comboBox1 = new System.Windows.Forms.ComboBox();this.label4 = new System.Windows.Forms.Label();this.txtFile = new System.Windows.Forms.TextBox();this.btnSave = new System.Windows.Forms.Button();this.btnStart = new System.Windows.Forms.Button();this.btnLogin = new System.Windows.Forms.Button();this.label3 = new System.Windows.Forms.Label();this.txtPwd = new System.Windows.Forms.TextBox();this.label2 = new System.Windows.Forms.Label();this.txtUserID = new System.Windows.Forms.TextBox();this.label1 = new System.Windows.Forms.Label();this.numericUpDown1 = new System.Windows.Forms.NumericUpDown();this.IP = new System.Windows.Forms.Label();this.txtIP = new System.Windows.Forms.TextBox();this.pictureBox1 = new System.Windows.Forms.PictureBox();((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit();((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();this.SuspendLayout();// // button1// this.button1.Cursor = System.Windows.Forms.Cursors.Hand;this.button1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.button1.Location = new System.Drawing.Point(377, 360);this.button1.Name = "button1";this.button1.Size = new System.Drawing.Size(138, 22);this.button1.TabIndex = 58;this.button1.Text = "打开视频存放位置";this.button1.UseVisualStyleBackColor = true;this.button1.Click += new System.EventHandler(this.button1_Click);// // comboBox1// this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;this.comboBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;this.comboBox1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.comboBox1.FormattingEnabled = true;this.comboBox1.Items.AddRange(new object[] {".mp4",".avi",".wmv",".3gp",".flv"});this.comboBox1.Location = new System.Drawing.Point(303, 361);this.comboBox1.Name = "comboBox1";this.comboBox1.Size = new System.Drawing.Size(55, 25);this.comboBox1.TabIndex = 57;// // label4// this.label4.AutoSize = true;this.label4.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.label4.Location = new System.Drawing.Point(14, 360);this.label4.Name = "label4";this.label4.Size = new System.Drawing.Size(116, 17);this.label4.TabIndex = 56;this.label4.Text = "请输入视频文件名:";// // txtFile// this.txtFile.Location = new System.Drawing.Point(136, 360);this.txtFile.Name = "txtFile";this.txtFile.Size = new System.Drawing.Size(161, 21);this.txtFile.TabIndex = 55;// // btnSave// this.btnSave.Cursor = System.Windows.Forms.Cursors.Hand;this.btnSave.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.btnSave.Location = new System.Drawing.Point(490, 298);this.btnSave.Name = "btnSave";this.btnSave.Size = new System.Drawing.Size(57, 45);this.btnSave.TabIndex = 54;this.btnSave.Text = "保存";this.btnSave.UseVisualStyleBackColor = true;this.btnSave.Click += new System.EventHandler(this.btnSave_Click);// // btnStart// this.btnStart.Cursor = System.Windows.Forms.Cursors.Hand;this.btnStart.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.btnStart.Location = new System.Drawing.Point(421, 298);this.btnStart.Name = "btnStart";this.btnStart.Size = new System.Drawing.Size(57, 45);this.btnStart.TabIndex = 53;this.btnStart.Text = "录制";this.btnStart.UseVisualStyleBackColor = true;this.btnStart.Click += new System.EventHandler(this.btnStart_Click);// // btnLogin// this.btnLogin.Cursor = System.Windows.Forms.Cursors.Hand;this.btnLogin.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.btnLogin.Location = new System.Drawing.Point(352, 298);this.btnLogin.Name = "btnLogin";this.btnLogin.Size = new System.Drawing.Size(57, 45);this.btnLogin.TabIndex = 52;this.btnLogin.Text = "登录";this.btnLogin.UseVisualStyleBackColor = true;this.btnLogin.Click += new System.EventHandler(this.btnLogin_Click);// // label3// this.label3.AutoSize = true;this.label3.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.label3.Location = new System.Drawing.Point(172, 325);this.label3.Name = "label3";this.label3.Size = new System.Drawing.Size(44, 17);this.label3.TabIndex = 51;this.label3.Text = "密码:";// // txtPwd// this.txtPwd.Location = new System.Drawing.Point(221, 322);this.txtPwd.Name = "txtPwd";this.txtPwd.PasswordChar = '*';this.txtPwd.Size = new System.Drawing.Size(115, 21);this.txtPwd.TabIndex = 50;this.txtPwd.Text = "8910jqk#";this.txtPwd.UseSystemPasswordChar = true;// // label2// this.label2.AutoSize = true;this.label2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.label2.Location = new System.Drawing.Point(8, 322);this.label2.Name = "label2";this.label2.Size = new System.Drawing.Size(44, 17);this.label2.TabIndex = 49;this.label2.Text = "用户名";// // txtUserID// this.txtUserID.Location = new System.Drawing.Point(66, 322);this.txtUserID.Name = "txtUserID";this.txtUserID.Size = new System.Drawing.Size(100, 21);this.txtUserID.TabIndex = 48;this.txtUserID.Text = "admin";// // label1// this.label1.AutoSize = true;this.label1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.label1.Location = new System.Drawing.Point(172, 295);this.label1.Name = "label1";this.label1.Size = new System.Drawing.Size(44, 17);this.label1.TabIndex = 47;this.label1.Text = "端口:";// // numericUpDown1// this.numericUpDown1.Location = new System.Drawing.Point(222, 295);this.numericUpDown1.Maximum = new decimal(new int[] {65535,0,0,0});this.numericUpDown1.Minimum = new decimal(new int[] {1,0,0,0});this.numericUpDown1.Name = "numericUpDown1";this.numericUpDown1.Size = new System.Drawing.Size(114, 21);this.numericUpDown1.TabIndex = 46;this.numericUpDown1.Value = new decimal(new int[] {8000,0,0,0});// // IP// this.IP.AutoSize = true;this.IP.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));this.IP.Location = new System.Drawing.Point(20, 295);this.IP.Name = "IP";this.IP.Size = new System.Drawing.Size(19, 17);this.IP.TabIndex = 45;this.IP.Text = "IP";// // txtIP// this.txtIP.Location = new System.Drawing.Point(66, 295);this.txtIP.Name = "txtIP";this.txtIP.Size = new System.Drawing.Size(100, 21);this.txtIP.TabIndex = 44;this.txtIP.Text = "192.168.1.64";// // pictureBox1// this.pictureBox1.Location = new System.Drawing.Point(5, 5);this.pictureBox1.Name = "pictureBox1";this.pictureBox1.Size = new System.Drawing.Size(542, 269);this.pictureBox1.TabIndex = 43;this.pictureBox1.TabStop = false;// // VideoControl// this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.Controls.Add(this.button1);this.Controls.Add(this.comboBox1);this.Controls.Add(this.label4);this.Controls.Add(this.txtFile);this.Controls.Add(this.btnSave);this.Controls.Add(this.btnStart);this.Controls.Add(this.btnLogin);this.Controls.Add(this.label3);this.Controls.Add(this.txtPwd);this.Controls.Add(this.label2);this.Controls.Add(this.txtUserID);this.Controls.Add(this.label1);this.Controls.Add(this.numericUpDown1);this.Controls.Add(this.IP);this.Controls.Add(this.txtIP);this.Controls.Add(this.pictureBox1);this.Name = "VideoControl";this.Size = new System.Drawing.Size(556, 398);this.Load += new System.EventHandler(this.VideoControl_Load);((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit();((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();this.ResumeLayout(false);this.PerformLayout();}#endregionprivate System.Windows.Forms.Button button1;private System.Windows.Forms.ComboBox comboBox1;private System.Windows.Forms.Label label4;private System.Windows.Forms.TextBox txtFile;private System.Windows.Forms.Button btnSave;private System.Windows.Forms.Button btnStart;private System.Windows.Forms.Button btnLogin;private System.Windows.Forms.Label label3;private System.Windows.Forms.TextBox txtPwd;private System.Windows.Forms.Label label2;private System.Windows.Forms.TextBox txtUserID;private System.Windows.Forms.Label label1;private System.Windows.Forms.NumericUpDown numericUpDown1;private System.Windows.Forms.Label IP;private System.Windows.Forms.TextBox txtIP;private System.Windows.Forms.PictureBox pictureBox1;}
}

    至此,此项目结束。

    右键点击解决方案,添加新项目,如下,至于为什么建立两个项目,我一会儿在下面解释,

    在HkHelper项目中添加类CHCNetSDK.cs,此类是海康提供的,可以在官网找到

    接下来,最重要的,项目属性设置如下,两个项目都要设置:

    至此,自定义控件已经完成,接下来就是打包,新建一个安装项目:

    右键点击安装项目,“添加”->“项目输出”,并选择自定义控件的项目,然后确定

    然后添加海康提供的SDK的库文件文件夹下的所有文件和文件夹到项目中,如下:

    然后生成项目,会生成setup.exe和SetupVideo.msi两个文件,然后用打包文件,把这两个文件打包称cab文件就OK了

打包文件一共三个cabarc.exe、build.bat、install.inf

build.bat文件:

"cabarc.exe"  n VideoSetup.cab SetupVideo.msi install.inf

install.inf文件:

[version]
signature="$CHICAGO$"
AdvancedINF=2.0[Setup Hooks]
hook1=hook1[hook1]
run=msiexec.exe /i "%EXTRACT_DIR%\SetupVideo.msi" /qn

cabarc.exe是微软提供的工具

最后说一下为什么要分为两个项目去实现控件,那是因为如果在一个项目中的话,调用海康动态库的类CHCNetSDK.cs不能进行COM注册

转载于:https://www.cnblogs.com/zzp0320/p/7890852.html

C#制作ActiveX控件中调用海康SDK的问题相关推荐

  1. 如何在 ActiveX 控件中使用字体

    字体的使用是ActiveX控件制作过程中不可缺少的部分.本文将深入浅出地介绍在ActiveX控件中制作过程中如何使用字体.本文所提及的ActiveX控件制作是指利用VC++6.0的MFC Active ...

  2. 如何在ActiveX控件中使用字体3

    如何在ActiveX控件中使用字体3 例程2:Label1.ocx 例程2的Label1控件与例程1的Label控件在功能实现上没有任何区别,只是在改变字体特性时,不再使用库存字体属性Font,而是使 ...

  3. java调用ocx控件(ActiveX控件),SWT调用ocx(ActiveX)

    java调用ocx控件(ActiveX控件),SWT调用ocx(ActiveX) 注 : OLE.OCX.ActiveX不进行过多阐述,简单理解就是插件,组件类 调用成功,即可展示ocx对应的窗口 ​ ...

  4. linux64下调用海康sdk(=登陆、获取通道列表、获取文件列表、按照文件下载文件、按照时间下载文件)

    linux下调用海康sdk 1.库文件的配置 mkdir /data/hk_sdk/ cd /data/hk_sdk/将海康SDK的lib文件夹复制到/data/hk_sdk/下 lib文件下面的结构 ...

  5. C#制作activeX控件

    背景 最近需要做web实时播放摄像头视频的管理网站,而设备提供的接口则是需要提供控件句柄,java语言获取控件句柄不太会,只好考虑利用C#将控件做成activeX嵌入网页中. 开发步骤 1.利用vs2 ...

  6. 图解VC++开发ActiveX控件C#调用

    1 新建ActiveX控件工程 2 编译,运行 使用下图所示VC++自带测试工具来测试ActiveX控件: 3 测试容器 插入刚做的ActiveXDemo1控件 4 添加属性 添加名为outstr的属 ...

  7. java 调用dll_Python调用海康SDK抓取红外图像

    海康SDK提供了C++.C#.Java等示例代码,可以使用这些语言进行二次开发.对于做算法开发的人来说,就想快速采集到图像,然后在Matlab或Python里对图像进行分析,使用C++.C#.Java ...

  8. C#使用WebService调用海康SDK实现抓图与录像实时下载

    1.海康设备网络SDK下载 下载地址:https://www.hikvision.com/cn/download_more_401.html 下载完毕解压后的目录结构如下: 2.代码实现 通过参考&q ...

  9. Python调用海康SDK进行车牌识别(动态链接库的方法—不通过swig)

    由于公司项目需要,要通过Python取得海康相机识别到的车牌号,由于目前在办公室,无法进行实际测试,所以通过网络触发抓拍的方式来进行. 首先要下载海康官网的SDK示例,最开始从网上查找资料是通过swi ...

最新文章

  1. thinkphp 个别字段无法更新_Ripro子主题:jizhichlid极致主题,原创首发永久更新,不限域名永乐使用...
  2. linux常用基础命令操作收集
  3. 洛谷 - P1433 - 吃奶酪 - dfs
  4. C++将“引用”作为函数返回值类型的格式、好处和注意事项?
  5. 2010年第一届蓝桥杯省赛 —— 第二题
  6. 怎样升级android10版本,手机怎么升级win10系统 win10手机版升级教程
  7. mac gcc安装_16_超级小白Mac Pro下安装superset遇见的坑
  8. android p获取通话记录_Android 底层的进程间同步机制
  9. 安川焊接机器人做圆弧运动编程_安川MOTOMAN工业机器人编程与操作(3)
  10. en55032最新标准下载_欧盟CE认证EN55032标准
  11. AD将原理图转换成彩色或者黑白PDF
  12. 数学实验基于matlab软件,数学实验:基于MATLAB软件
  13. Photoshop如何调整证件照背景色
  14. python 3d绘图模块_在Python 3中绘制3D多边形
  15. 【无标题】体验scratch海底世界
  16. 管理学原理试题及答案
  17. 统计学,机器学习,数据挖掘,深度学习
  18. 三星笔记本bios设置里找不到U盘启动盘的解决方法
  19. Traveler 10上的新能力:支持IMSMO邮件客户机
  20. SQL中的case when函数使用

热门文章

  1. web网页版苹果计算器(HTML、CSS、JavaScript实现)
  2. 编码问题的发展及python2和python3的编码差异
  3. 在HBase里使用MapReduce例子
  4. MVC5+EF6 入门完整教程六
  5. python实现电脑自动关机
  6. 33岁学计算机还是设计,30岁了,我想在电脑上学一门学以致用的技术100分!现在我的弟 爱问知识人...
  7. uni-app评论组件
  8. C#如何定义全局变量
  9. 长春净月小学一对一补习班哪家比较好?
  10. 搜狗浏览器扩展帮你提升工作效率