[转].c# 开发Active控件(一)

首先,建立一个WinForm控件项目MyActive,并拖入一个Lable控件,文字设为HelloWorld,如图:

此时编译项目,可以生成MyActive.dll,将些dll拷贝到IIS的虚拟根目录下,然后建立一个网页文件test.html,此网页文件的代码如下:

<HTML>
<HEAD>
  <TITLE>测试测试</TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
</HEAD>
<BODY>
  <object id="MyActive" classid="http://localhost/mp/MyActive.dll#MyActive.UserControl1" Width="184" Height="96" VIEWASTEXT></object>
</BODY>
</HTML>

然后在IE地址栏中输入以下地址:http://localhost/mp/test.html,我们看到出现如下界面:

此时,我们的控件第一步就已经完成了!

但此时还未完在,只能在本机显示正常,如果换另一台机子就出显示一个红叉,或者弹出对话框说这个控件没有任何权限,所以必须声明这个控件必须使用赋予的权限,才可以显示出界面.

我们在AssemblyInfo.cs中引用System.Security命名空间,并添加一句[assembly : AllowPartiallyTrustedCallers()]

现在重新编译,并且替换以前的dll,界面又可以显示出来了.

此时,我们的按件还算不上真正的Active控件,这个控件到现在为止,还只是能够实现自身的显示,并且不能实现更多的功能,比如实现与脚本的交互或者操作客户端的注册表或者磁盘。这是由于.Net Framework的安全模型所限制的。如果我们希望这个控件突破.Net Framework安全模型的限制,实现与脚本的交互或者操作客户端的注册表或者磁盘的话,必须要让它成为真正的ActiveX控件。下面,我们把刚才的控件变成真正的ActiveX控件。

1:使用工具->创建GUID,生成一个GUID,并修改UserControl1.cs,首先增加引用System.Runtime.InteropServices命名空间,并在Demo前面加入一条语句[Guid("E017DDD5-35BC-4af5-A0FA-C55D4A43A03C")](这串是生成的GUID每次都不一样的,它是Active唯一的标识符),如图:

2:修改项目属性,如下图:

将为Com Interop注册由false改成true.

3:重新编译,此时我们使用工具->OLE/COM对象查看器,就可以查看到自已注册的Active控件,如图:

现在,我们已经可以像使用其它ActiveX控件一样在网页中显示了。在MyActive.UserControl1点击鼠标右键,如图:

选择Copy HTML <object> Tag to Clipboard,可以将代码拷入剪贴板,现在我们将test.html的代码修改成如下:

<HTML>
<HEAD>
  <TITLE>测试测试</TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
</HEAD>
<BODY>
  <object id="MyActive" classid="clsid:E017DDD5-35BC-4AF5-A0FA-C55D4A43A03C" Width="184" Height="96" VIEWASTEXT></object>
</BODY>
</HTML>

然后再在IE中打开这个网页,我们发现又可显示,这时就是真正的Active控件了.

来源:http://hi.baidu.com/meteortent/blog/item/3e809c59af340d90800a18c4.html

原文地址:https://www.cnblogs.com/tukzer/p/1900052.html