工作中实际处理问题用到的,写下来记录下,怕到时候原文链接404了,顺便帮助同样遇到这个问题的人。
原文链接:https://blogs.msdn.microsoft.com/asiatech/2011/12/05/how-to-develop-and-deploy-activex-control-in-c/
想要不遇到什么问题顺利过关请先准备好VS2010开发工具,当然使用后续版本同样能完成COM控件的开发,并且也可以正常使用,但是这篇文章并不会告诉你高于VS2010版本怎么去做这个COM的安装包。(以下内容为谷歌自动翻译结果,部分截图是用的VS2015和VS2010差别不大。手动滑稽)
创建ActiveX控件DLL
在托管环境中,没有OCX控件。因此,我们需要构建一个DLL控件。
1.在“ Visual Studio 2010”中,使用“ Visual C#”创建一个新的库项目。(注意上面的框架版本可以根据你的需求自己调整,不过既然都用Com控件了肯定是针对IE浏览器,一般都比较老还是用2.0比较好)
2.重命名类名(这个根据你的实际情况修改就行),在类里面引入“ System.Runtime.InteropServices”命名空间
3.给程序设置签名(应该是防止浏览器阻止控件运行的,由于我们的用户都会把我们网站加入信任列表,这步对我影响不大)
选中你的项目,右键->属性,选中签名选项卡,勾选为程序集签名,然后新建名称密钥文件。
4.选择“ 工具 -> 创建GUID ”以创建新的GUID(这个GUID就是后面浏览器上需要用到的CLSID)
5. 添加 “ProgId”, “Guid”, “ComVisible” 到你的类上, 并且实现你的逻辑
using System;
using System.Runtime.InteropServices;
namespace DemoCSharpActiveX
{
/// <summary>
/// Demo HelloWorld class
/// </summary>
[ProgId("DemoCSharpActiveX.HelloWorld")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[Guid("415D09B9-3C9F-43F4-BB5C-C056263EF270")]
[ComVisible(true)]
public class HelloWord
{
[ComVisible(true)]
public String SayHello()
{
return "Hello World!";
}
}
}
6. 修改AssemblyInfo.cs文件总的ComVisible为true,并修改GUID为你的GUID值(这一步在我这改不改没有区别)
7.编译控件,并注册控件
注册命令(不同于MFC开发的OCX,此控件不能用RegSvr32注册):
C:\Windows\Microsoft.NET\Framework\v2.0.50727>regasm /codebase <dll全路径>
取消注册的命令: regasm /u <dll全路径>
8.到此dll开发可以算结束了,亲测这些步骤在VS2015上也同样可以通过。
包装控件到安装包文件中。
公司电脑没有VS2010,家里电脑被老婆关机了,晚上回去再补写。。。