C#制作activeX控件
背景
最近需要做web实时播放摄像头视频的管理网站,而设备提供的接口则是需要提供控件句柄,java语言获取控件句柄不太会,只好考虑利用C#将控件做成activeX嵌入网页中。
开发步骤
1.利用vs2010创建一个windows窗体控件库,命名为VideoPlay;
2.在窗体控件中添加一个pictureBox控件及两个按钮;
3.在AssemblyInfo.cs中引用System.Security命名空间,并添加一句:[assembly : AllowPartiallyTrustedCallers()]
4.创建GUID
ActiveX控件首先是COM组件,COM组件有唯一的GUID。后面我们可以看到,在Web中,需要通过GUID定位并加载已经注册的ActiveX控件。
如果使用的是VS2010,工具菜单下有个“创建GUID”菜单,点击它可以创建一个新的GUID,然后把其复制作为CameraVideoPlayer的特性:
[Guid("2A80B21A-9E7C-40B3-88DA-CF98A6A34B3D")]public partial class VideoPlay: UserControl
5. 实现IObjectSafety接口
当ActiveX控件在浏览器中调用的时候,往往会出现警告框,提示不安全的控件正在运行。这是由浏览器安全策略所限定的,控件通过实现IObjectSafety接口以向浏览器表明自己是合法的。在项目中增加IObjectSafety接口的定义:
[Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{
void GetInterfacceSafyOptions(System.Int32 riid,out System.Int32 pdwSupportedOptions,out System.Int32 pdwEnabledOptions);
void SetInterfaceSafetyOptions(System.Int32 riid, System.Int32 dwOptionsSetMask, System.Int32 dwEnabledOptions);
}
并让VideoPlay实现这个接口
[Guid("2A80B21A-9E7C-40B3-88DA-CF98A6A34B3D")]
public partial class VideoPlay: UserControl, IObjectSafety
{
public VideoPlay()
{
InitializeComponent();
}
public void GetInterfacceSafyOptions(int riid, out int pdwSupportedOptions, out int pdwEnabledOptions)
{
pdwSupportedOptions = 1;
pdwEnabledOptions = 2;
}
public void SetInterfaceSafetyOptions(int riid, int dwOptionsSetMask, int dwEnabledOptions)
{
}
}
IObjectSafety接口的两个方法的实现都可以采用上面的代码来做。
6.程序集设定
接下来,我们需要对控件的程序集(OMCS_ActiveX)做一个设置,以表明其将作为一个COM组件使用。打开AssemblyInfo.cs文件,首先将ComVisible特性设置为true。其次,增加AllowPartiallyTrustedCallers特性。如下所示:
// 将 ComVisible 设置为 false 使此程序集中的类型
// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
// 则将该类型上的 ComVisible 特性设置为 true。
[assembly: ComVisible(true)]
[assembly: AllowPartiallyTrustedCallers()]
最后,在项目属性的“生成”页中,将“为COM互操作注册”的CheckBox勾上。
7.制作安装程序
在当前解决方案中添加一个新的安装项目;
将上面的项目的主输出导入到安装项目的“应用程序文件夹”下面;
修改主输出的文件安装属性中的Register项为vsdrpCOM;
编译安装项目,将会生成两个文件setup.exe、Setup1.msi。将它们拷贝到网站虚拟目录的根目录下。
8.Web集成
现在我们写一个最简单的HTML来试试加载视频播放的ActiveX控件:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title></title>
</head>
<body>
<form id="form1">
<table>
<tr>
<td align="center">
<object id="videoplayer"
classid="clsid:{2A80B21A-9E7C-40B3-88DA-CF98A6A34B3D}" codebase="VideoPlaySetup.msi" width="500" height="600">
</object>
</td>
</tr>
</table>
</form>
</body>
</html>
这个Classid就是我们在VideoPlay.cs的Guid里的序列号,浏览器是通过GUID来定位ActiveX控件的,如果本机不存在目标ActiveX控件,则自动下载codebase属性指示的安装程序进行安装。
将HTML文件部署好后,可以打开网页,需要允许浏览器加载activeX。
9.cab文件制作
当然,也可做成cab文件嵌入网页,需要如下工具:
cabarc.exe:微软提供的cab打包工具
VideoPlaySetup.msi: 项目生成的部署安装文件
install.inf : 需要跟ActiveXSetup.msi打包在一起的文件
build.bat: 打包的批处理命令
其中,install.inf文件内容如下:
[version]
signature="$CHICAGO$"
AdvancedINF=2.0
[Setup Hooks]
hook1=hook1
[hook1]
run=msiexec.exe /i "%EXTRACT_DIR%\VideoPlaySetup.msi" /qn
build.bat内容如下:
"cabarc.exe" n VideoPlaySetup.cab VideoPlaySetup.msi install.inf
运行一下bat就可以生成一个cab文件,在网页中,将原来的msi文件换成cab文件即可。
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title></title>
</head>
<body>
<form id="form1">
<table>
<tr>
<td align="center">
<object id="videoplayer"
classid="clsid:{2A80B21A-9E7C-40B3-88DA-CF98A6A34B3D}" codebase="VideoPlaySetup.cab" width="500" height="600">
</object>
</td>
</tr>
</table>
</form>
</body>
</html>
以上就是我的制作过程,如有不正确之处,还望指正。
参考文章
http://www.it165.net/pro/html/201209/3743.html
http://www.cnblogs.com/li-peng/p/3455247.html
http://www.cnblogs.com/qishichang/archive/2010/02/28/1675213.html
Q&A
1.如果编译时,提示你权限不够(Windows 7 UAC),需要以管理员运行Visual Studio。
2.如果编译时,The assembly could not be converted to a type library. Type library exporter
encountered an error while processing 'xxxxxx'. Error: 找不到元素.
在Relase 下进行编译。
3.如果其他计算机通过IE查看该网页,acitveX没有安装,网页上只有一个红叉,则有可能是对应版本的.netframework没有安装。
C#制作activeX控件相关推荐
- C#制作ActiveX控件中调用海康SDK的问题
事情是这样的,有一台海康威视的摄像头,客户需要一个ActiveX控件嵌入到网页中,通过点击按钮开始录制和结束录制来进行视频的录制和保存,关于海康摄像头的二次开发在此就不多说了,可以参考SDK中的说明. ...
- VC ActiveX 控件 开发总结
VC 制作ActiveX 控件(OCX) http://ileson.iteye.com/blog/1002910 1.vc6下建立一下activeX工程 详见http://hi.baidu. ...
- 如何在 ActiveX 控件中使用字体
字体的使用是ActiveX控件制作过程中不可缺少的部分.本文将深入浅出地介绍在ActiveX控件中制作过程中如何使用字体.本文所提及的ActiveX控件制作是指利用VC++6.0的MFC Active ...
- excel不能插入activex控件_办公小技巧:制作更炫酷的Excel下拉菜单
在Excel中制作下拉菜单,大都是利用数据有效性,再有就是表单控件中的组合框.数据有效性或表单控件组合框制作下拉菜单,快捷.便利.实用.功能很全面,但也有力所不及的地方,比如设置下拉菜单的字体.颜色. ...
- C#开发ActiveX控件及制作CAB包
一个项目要用到 ActiveX 控件,参照网上众多的例子,ActiveX控件倒是很容易就搞出来了: 然后做了一个[ 安装项目],倒是可以使用,只不过需要在客户端手动点击安装,下一步,下一步-觉得不是很 ...
- VLC media player ActiveX控件制作
昨天折腾折腾这个折腾了一天.大致干了这几件事: 一,重新制作VLC安装包,去掉一些不必要的东东,设置一些必要的东东 二,制作ActiveX cab包 三,给CAB包加数字签名 四,调用代码 一,重新制 ...
- C#BS通过ActiveX控件及制作CAB包来调CS
1) 创建Visual Studio解决方案 "ActiveXSolution". 2)在解决方案ActiveXSolution中添加 Windows窗体应用程序 "CS ...
- 如何发布ActiveX 控件
转自:http://blog.csdn.net/zougangx/archive/2008/07/30/2738147.aspx [背景] 做过ActiveX控件的朋友都知道,要想把自己做的Activ ...
- Asp.Net 中使用客户端Activex控件需要注意的事情
案例:Asp.Net +VB制作的Activex控件 操作系统:Windows2003 +Sp1 现象1:通过 <OBJECT classid="CLSID:132A80F5- ...
最新文章
- AI假新闻满天飞,打假神器GROVER帮你看清一切
- 用jstl截取字符串
- SuSE sftp限制用户活动目录
- alexnet 论文翻译
- 银河麒麟 安卓nginx_银河麒麟Kydroid 2.0全新发布:原生支持海量安卓APP
- NBA球星为啥那么多顶薪?数据可视化为你揭晓真相
- 微型计算机普遍采用的数字编码是,计算机原理复习题1
- 【技巧总结】string和char[]之前的相互转换(c_str()+strcpy+stringstream.str())
- SQL2008卸载。
- 第八章 软件项目团队管理
- python分苹果问题_蓝桥杯--算法提高--VIP--分苹果题目(差分数组)
- 面试:计算机网络基础详解(一)
- 【测绘程序设计试题集】 试题04 最短路径计算
- 【系统】【winget】从零开始配置一个开发用的 Windows 11 系统的电脑 - winget 代码终端安装软件
- UNIX的spctl命令
- Shp2osm:shp转换为osm格式文件
- 6.14 PowerBI系列之DAX函数专题-重点之集合函数UNION、INTERSECT、 except、crossjoin、generate
- 标题:2017-2018-20172309《程序设计与数据结构》课程总结
- 计算机仿真气垫上的直线运动验报告,在气垫导轨上测加速度的实验报告.doc
- Excel去重并进行统计(对列)