在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. python数据结构与算法——图的最短路径(Bellman-Ford算法)解决负权边

    # Bellman-Ford核心算法 # 对于一个包含n个顶点,m条边的图, 计算源点到任意点的最短距离 # 循环n-1轮,每轮对m条边进行一次松弛操作 # 定理: # 在一个含有n个顶点的图中,任意 ...

  2. Recyclerview使用系列教材

    Recylerview越来越多的人使用,本人录制了一套课程,欢迎大家观看,录制的比较仓促,第一课讲解的课程目录有点问题,请大家谅解,目录请看视频外该课程介绍的内容即可. 该课程付费课程包含: 1-Re ...

  3. jquery.cookie() 方法的使用(读取、写入、删除)

    一个轻量级的cookie 插件,可以读取.写入.删除 cookie. jquery.cookie.js 的配置 首先包含jQuery的库文件,在后面包含 jquery.cookie.js 的库文件. ...

  4. [BZOJ 3530][Sdoi 2014]数数

    阿拉~好像最近总是做到 AC 自动机的题目呢喵~ 题目的算法似乎马上就能猜到的样子…… AC 自动机 + 数位 dp 先暴力转移出 f[i][j] :表示从 AC 自动机上第 j 号节点走 i 步且不 ...

  5. 论文笔记之:Deep Attention Recurrent Q-Network

    Deep Attention Recurrent Q-Network 5vision groups  摘要:本文将 DQN 引入了 Attention 机制,使得学习更具有方向性和指导性.(前段时间做 ...

  6. mysql事务,START TRANSACTION, COMMIT和ROLLBACK,SET AUTOCOMMIT语法

    http://yulei568.blog.163.com/blog/static/135886720071012444422/ MyISAM不支持 START TRANSACTION | BEGIN ...

  7. api接口签名验证(MD5)

    不要急,源代码分享在最底部,先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候, ...

  8. 【转】maven核心,pom.xml详解

    感谢如下博主: http://www.cnblogs.com/qq78292959/p/3711501.html maven核心,pom.xml详解 什么是pom?    pom作为项目对象模型.通过 ...

  9. MVC:上传文件时限制文件类型

    之前写过一篇:MVC:上传文件 今天补充下一个功能:如何限制上传文件类型 文件类型可以在前段限制,但是太容易被绕过,最好还是在后端处理. 修改upload方法代码: [HttpPost] public ...

  10. 标准库函数atoi的实现

    标准库函数atoi用于将字符串类型的数据转换为整形数据:在转换过程中要考虑空指针.空字符串"".正负号,溢出等情况 这里是将字符串str转换为32位整型,其正数的最值为0x7FFF ...