.NET环境下创建 Activex http://www.cnblogs.com/liulixiang/archive/2011/05/23/2054371.html
使用VS2010 C# 开发 ActiveX 控件(上) http://www.cnblogs.com/yungboy/archive/2011/01/10/1932433.html
使用VS2010 C#开发ActiveX控件(下),完整代码下载 http://www.cnblogs.com/yungboy/archive/2011/01/11/1932438.html
下边对学习的内容进行总结,主要是对我参考的文章不足部分进行修改。
一. 建立ActiveX控件(暂时称为ActiveX控件,其实是winform下的用户控件)。
1.打开vs2010,新建空年方案。方案名称自己取。
然后,新建项目->Visual C#->Windows->类库,名称为HelloWorld。
2. 删除自动创建的Class1.cs文件,然后在HelloWorld上右键->添加->新建项,在弹出的窗口中选择“用户控件”,名称为Demo,此时会出现一个类似于winform设计界面,我们在上面从工具箱中拖动一个Label在上面,并设定Label的Text为"HelloWorld"。
此时编译项目,可以生成HelloWorld.dll。 将此dll拷贝到IIS的虚拟根目录下,然后在虚拟目录的物理目录下建立一个helloworld.htm的文件,html代码如下:
<body bgcolor='#223344'>
<object id="helloworld" classid=’http://localhost/HelloWorld.dll#HelloWorld.Demo’ Width="184" Height="96" VIEWASTEXT> </object>
</body>
复制代码
注:我们可以在Object的classid中使用“http://localhost/类.dll#命名空间.类名”这样的方式使用未注册的控件(此时还不能称为ActiveX)。
3、测试:在IE地址栏中输入以下地址:http://localhost/helloworld.htm,出现下图界面,控件已经成功在页面上显示了。OK,我们已经完成了第一步。
但是问题到这里还没有解决。不相信?你可以试试在另外一台机器上测试,注意需要修改对应的html代码和URL地址。你可以看到这个在原来显示控件的地方是一个红色的叉,或者还会弹出一个对话框,表示这个控件没有任何权限。出现这个结果是微软的默认设置造成的,必须在控件项项目中Properties下AssemblyInfo.cs中增加一个安全声明,声明这个控件必须使用赋予的权限,才可以显示出界面。添加语句如下:
//设置控件的权限
[assembly: System.Security.AllowPartiallyTrustedCallers()]
复制代码
现在重新编译,并且替换以前的dll,界面又可以显示出来了。
到现在为止,我们编写的还不是真正的ActiveX控件。这个控件只是能够实现自身的显示,并且不能实现更多的功能,比如实现与脚本的交互或者操作客户端的注册表或者磁盘。这如果我们希望这个控件突破.Net Framework安全模型的限制,实现与脚本的交互或者操作客户端的注册表或者磁盘的话,必须要让它成为真正的ActiveX控件。
二. 将用户控件变成Com可见
1.在HelloWorld(用户控件)项目上点击右键,选择属性,将打开项目属性面板,选择应用程序标签页,点击“程序集信息”按钮,在弹出的窗口中勾选“使程序集COM可见”(下图为别人的图片,仅供参考)
2.切换到生成标签页,然后勾选“为Com互操作注册”,在该页面的最上面,有一个配置选项,切换到realse,并再次勾选“为Com互操作注册”。这样无论是在debug还是在release状态下,都可以把用户控件当做com接口使用。如下图。(如果不使用realse模式,realse可以不设置。)
注意:在Win7中,沟选“为Com互操作注册”后,如果不是Administrtor用户,编译项目会出错。所以一定要记得在Administrator下编写代码。
3、修改用户控件后台代码,代码如下,
using System.Runtime.InteropServices;
namespace HelloWorld
{
[Guid("F3F99F87-276D-4F7C-96F9-85F5261773CD")]
public partial class Demo: UserControl
{
}