在VS2010中使用C#开发基于WinForm的ActiveX控件

常见的一些ActiveX大部分是使用VB、Delphi、C++开发,使用C#开发ActiveX要解决下面三个问题:

  • 使.NET组件可以被COM调用
  • 在客户机上注册后,ActiveX控件能通过IE的安全认证
  • 已在客户机上注册时,安装包能通过IE的签名认证

配置:win 7,VS2010

步骤第一步,创建控件

1.创建WinForm控件,命名为WebForm,如图1:

2.设置项目的Assembly属性,如图2所示,并对Make Assembly Com-Visible选项划钩

并且设置项目的编译选项,如图3所示,对Register for COM Interop选中对COM组件进行注册。(注意,此处如果实在debug状态下修改的,那在调到release状态下还需要再设置一次。)

3.打开AssemblyInfo文件添加引用 using System.Security; 并且添加 [assembly: AllowPartiallyTrustedCallers()] 语句

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security; //note! // General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("WebForm")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("WebForm")]
[assembly: AssemblyCopyright("Copyright © 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AllowPartiallyTrustedCallers()] // note!

4.为控件类创建一个唯一的GUID,注意这里的GUID不能和AssemblyInf中的GUID相同,生成GUID的方法如下

使用Microsoft Windows SDK Tools中的GUID Generator生成新的GUID,如图

COPY生成的GUID到记事本,再拷贝GUID的字符串到控件类,并添加引用 using System.Runtime.InteropServices;

using System.Runtime.InteropServices;    // note !

namespace WebForm
{
[Guid("575483BC-7224-44F5-A77C-78AB7FC4E606")] // note! public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
} }
}

第二部分,打包发布ActiveX控件

5.ActiveX控件可以使用VS 2010的安装项目进行部署,使用VS 2010创建Windows Form的安装工程就可以将ActiveX的dll进行打包。在打包时注意将ActiveX控件项目作为主输出项目,并设置其Register属性为vsdrpCOM,创建打包项目如下图5所示:

之后添加项目输出,如下图

6.设置项目属性,如下图,文件名就是打包后安装文件.MSI的文件名。设置包文件、压缩方式,CAB size,这三项均选择默认值即可。

最后设置安装URL,这里的安装URL是用来发布或者测试ActiveX的URL地址的,我们设置为本地url:K:/VSProject/WebForm/Setup/Debug/

7. 将之前的WebForm.dll打包进ActiveX控件。

将WebForm.dll放入包中,如下图,build solution之后,便会出现Setup.exe和Setup.msi两个文件,其中Setup.exe就是我们在使用ActiveX时的codebase文件。

8.测试基于WinForm的ActiveX控件。新建一个htm文件,输入如下代码并保存:

其中id为建立的控件类名,classid为步骤中生成的Guid,codebase为本地的ActiveX安装源,如果做服务器可以修改为ip源等,这里暂不赘述。

<object id="UserControl1"
classid="clsid:575483BC-7224-44F5-A77C-78AB7FC4E606"
width="500"
height="500"
codebase="K:/VSProject/WebForm/Setup/Debug/Setup.exe">
</object>

测试结果

如图,由C#创建的基于WinForm的控件可以正确的显示在IE Explorer中

参考资料

http://www.cnblogs.com/yungboy/archive/2011/01/10/1932433.html

http://homer.cnblogs.com/archive/2005/01/26/97822.aspx

http://www.cnblogs.com/Charles2008/archive/2010/04/11/1709844.html

http://www.cnblogs.com/homer/archive/2005/01/04/86473.html

http://www.cnblogs.com/homer/archive/2005/01/08/88780.html

http://www.cnblogs.com/homer/archive/2005/01/08/88780.html

{VS2010C#}{WinForm}{ActiveX}VS2010C#开发基于WinForm的ActiveX控件的更多相关文章

  1. winform项目中开发的一套UI控件库

    https://github.com/houyhea/winform-control-lib winform-control-lib 曾经在一个winform项目中开发的一套UI控件库 类图:  效果 ...

  2. WinForm开发中通用附件管理控件设计开发参考

    1.引言 在WinForm开发中,文件附件的管理几乎在任何一个应用上都会存在,是一个非常通用集中的公共模块.我们日常记录会伴随着有图片.文档等附件形式来展现,如果为每个业务对象都做一个附件管理,或者每 ...

  3. [转] WinForm自定义函数FindControl实现按名称查找控件

    原文地址 WinForm自定义函数FindControl实现按名称查找控件 本文所述实例实现WinForm自定义函数FindControl实现按名称查找控件的功能,在C#程序开发中有一定的实用价值. ...

  4. winform中button点击后再点击其他控件致使button失去焦点,此时button出现黑色边线,去掉黑色边线的方法

    winform中button点击后再点击其他控件致使button失去焦点,此时button出现黑色边线,去掉黑色边线的方法 button的FlatAppearence属性下,设置BorderSize= ...

  5. winform中如何在多线程中更新UI控件--ListView实时显示执行信息

    1.在winform中,所有对UI的操作,都得回到UI线程(主线程)上来,才不会报错 线程间操作无效: 从不是创建控件的线程访问它. 2.在winform中,允许通过Control.invoke对控件 ...

  6. SNF开发平台WinForm-表单验证控件-通用

    CS程序也能做到像BS程序一样的验证效果,如下: 1.验证控件的展示 校验时如果不符合验证条件的控件,会在控件上显示较显眼的图标. 当出现不符合验证的控件时,鼠标悬浮会显示自定义的提示信息. 如:输入 ...

  7. ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇

    原文:ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇 第三章 为控件添加事件 后篇 前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事件是 ...

  8. C/S模式开发中如何利用WebBrowser控件制作导航窗体

    原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...

  9. c#调用c++制作的基于mfc的ocx控件

    原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/51286926 原文中有问题部分已修改. c#调用c++制作的基于mfc的ocx控件     ...

随机推荐

  1. zookeeper命令行(zkCli.sh&zkServer.sh)使用及四字命令

    zookeeper提供了很多方便的功能,方便我们查看服务器的状态,增加,修改,删除数据(入口是zkServer.sh和zkCli.sh). 还提供了一系列四字命令,方便我们跟服务器进行各种交互,来确认 ...

  2. Node.js高级编程读书笔记 - 3 网络编程

    Outline 3.4 构建TCP服务器 3.5 构建HTTP服务器 3.6 构建TCP客户端 3.7 创建HTTP请求 3.8 使用UDP 3.9 用TLS/SSL保证服务器的安全性 3.10 用H ...

  3. windows 下mysql每日定时备份的几种方法

    第一种:新建批处理文件 backup.dat,里面输入以下代码:  代码如下 复制代码 net stop mysql xcopy "C:/Program Files/MySQL/MySQL ...

  4. Sqlserver数据库总结

    由于公司项目需要这段时间一直在做有关于数据库方面的工作.趁这段时间有空,对数据库方面的知识进行一个梳理和归纳,以便以后需要时,查看起来方便. 使用的数据库主要有ORACLE10g和Sqlserver2 ...

  5. 惩罚因子(penalty term)与损失函数(loss function)

    penalty term 和 loss function 看起来很相似,但其实二者完全不同. 惩罚因子: penalty term的作用是把受限优化问题转化为非受限优化问题. 比如我们要优化: min ...

  6. set的应用

    头文件 ;#include <set> 简单应用: begin()     返回set容器的第一个元素 end()   返回set容器的最后一个元素 clear()        删除se ...

  7. [NOIP2011] 计算系数(二项式定理)

    题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...

  8. JavaWeb用Jdbc操作MySql数据库(一)

    一.添加开发包.在JavaWeb中用jdbc操作数据库,使用方法与java一样,但是在处理开发包的问题上有点差别.JavaWeb不能将mysql-connector-java-5.1.7-bin.ja ...

  9. 2016HUAS_ACM暑假集训2D - 敌兵布阵

    刚开始接触线段树,不得不说,每次接触到一个新的数据结构,都会是一场头脑风暴的“盛宴”.希望我能继续痛苦并快乐着学下去.我相信,有各路大神的博客相助,我还是能坚持下去的. 这个题目是HDU的1166,只 ...

  10. centos中开机时如何自启动samba服务器

    解决办法如下:1.编辑rc.local文件#vi /etc/rc.d/rc.local2.加入如下启动命令/usr/sbin/apachectl start/etc/rc.d/init.d/mysql ...