这里是详细讲解“用C#编写ActiveX控件(二)”的完整攻略。
1. 什么是ActiveX控件
ActiveX控件是一种运行在Windows操作系统上的可重用组件技术,它可以通过Web页面在Internet上进行传播使用,早期广泛应用于Internet Explorer中的插件。ActiveX控件的编写可以使用多种语言实现,如C++、VB、C#等。
2. 使用C#编写ActiveX控件的步骤
C#是一种Microsoft .Net Framework语言,使用C#编写ActiveX控件步骤如下:
(1)使用Visual Studio中的“Class Library”项目模板创建C#库项目。
(2)将C#库项目的输出类型设置为“ActiveX控件”。
可通过在项目属性的“生成”选项卡中设置输出类型为“ActiveX控件”:
输出类型:类库(.dll)
变为:
输出类型:ActiveX控件(.dll)
(3)在C#库项目中添加需要被外部程序调用的方法或属性。
例如:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace DemoActiveX
{
[Guid("3B3622EB-7FE9-4F6B-8692-22AB7468686B")]
public interface ICalculator
{
int Add(int a, int b);
int Multiply(int a, int b);
}
[Guid("67230DC0-B7B8-4A7D-A4E3-CD988360ABD2")]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(ICalculator))]
public class Calculator : ICalculator
{
public int Add(int a, int b)
{
return a + b;
}
public int Multiply(int a, int b)
{
return a * b;
}
}
}
上述代码中,创建了一个名为“DemoActiveX”的命名空间,在其中创建了一个名为“ICalculator”的接口和一个名为“Calculator”的类。计算器类提供了两个方法:Add和Multiply,用于计算两个整数的相加和相乘操作。重要的是在类定义上添加了ComVisible(true)的标记,以表明该类对COM组件工作。
另外,还使用了ComVisible(true)标记来公开接口ICalculator并公开无级接口成员。
(4)生成ActiveX控件Dll文件
编译C#库项目后,将生成一个名为“DemoActiveX.dll”的ActiveX控件Dll文件。
(5)注册ActiveX控件Dll文件
运行要注册控件的系统上的命令提示符(以管理员身份运行),输入以下命令进行注册控件操作:
regsvr32.exe DemoActiveX.dll
注意,必须以管理员身份运行CMD窗口。
(6)测试ActiveX控件
可以在HTML页面中使用
例如:
<html>
<head>
<script type="text/javascript">
function testActiveX() {
var cal = new ActiveXObject("DemoActiveX.Calculator");
var addResult = cal.Add(15, 10);
var multiplyResult = cal.Multiply(15, 10);
alert("Add: " + addResult + "\nMultiply: " + multiplyResult);
}
</script>
</head>
<body onload="testActiveX();">
<object id="obj1" classid="clsid:67230DC0-B7B8-4A7D-A4E3-CD988360ABD2" width="0" height="0"></object>
</body>
</html>
上述HTML代码创建了一个按钮,当点击该按钮时,将会调用ActiveX控件中的Add和Multiply方法,并将结果弹出对话框。
3. 示例
下面我们会使用两个示例演示如何编写和使用ActiveX控件。
示例一
一个简单的计算器ActiveX控件,包括两个公共方法Add和Multiply。
- 创建Visual Studio项目
首先创建一个Class Library (.NET Framework) 项目。
- 编写程序
向项目添加请求将计算器类导出为COM组件的特性。使用的特性如下:
- ComVisible: 用于标识类型是否是公开的COM组件。为可实现的公开COM组件,该属性必须为true。
- Guid: 用于唯一标识COM组件,必须为一个字符串类型的GUID值。GUID是16进制数字序列,定义了类型、函数库或对象的唯一标识符。GUID实际上是一个“全局唯一标识符”,用于确保在计算机上存储和传输数据时的唯一性。
代码如下:
using System.Runtime.InteropServices;
namespace SimpleActiveX
{
[ComVisible(true)]
[Guid("739AED4F-8E9D-4B7D-A28F-DCD3B1FD1173")]
public interface ISimpleCalculator
{
int Add(int x, int y);
int Multiply(int x, int y);
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[Guid("EC632335-AF72-4F1A-B8D3-7926C456BB79")]
public class SimpleCalculator: ISimpleCalculator
{
public int Add(int x, int y)
{
return x + y;
}
public int Multiply(int x, int y)
{
return x * y;
}
}
}
- 生成和发布ActiveX控件
在项目菜单上,选择“生成”->“生成解决方案”选项,生成项目代码。在此过程中,Visual Studio生成ActiveX控件DLL文件。
- 将ActiveX控件注册到系统
在Visual Studio“管理器”中,右键单机控件库项目,选择“注册”选项,将ActiveX DLL文件注册到系统。
- 测试ActiveX控件
在HTML文件中插入以下代码:
<!DOCTYPE html>
<html>
<head>
<script language="JavaScript">
function GetActiveXObject()
{
try {
var calculatorObject = new ActiveXObject("SimpleActiveX.SimpleCalculator");
var addResult = calculatorObject.Add(4, 2);
var multiplyResult = calculatorObject.Multiply(4, 2);
alert("Addition: " + addResult + "\nMultiplication: " + multiplyResult);
} catch (err) {
alert("Cannot create the ActiveX control");
}
}
</script>
</head>
<body>
<button onclick="GetActiveXObject()">Click here to add and multiply 2 numbers</button>
</body>
</html>
- 运行测试程序
运行HTML文件测试ActiveX控件是否能够正常使用。
示例二
该示例编写一个带有激活和退出事件的ActiveX控件。
- 创建Visual Studio项目
我们使用“Windows控制台应用程序”模板创建C#控制台应用程序项目。
- 编写程序
using System;
using System.Runtime.InteropServices;
namespace TestActiveX
{
[Guid("DFB982F7-E675-4152-848D-EA7FECF4FB46")]
public interface ITestActiveX
{
void Active();
void Deactive();
void Quit();
}
[Guid("6DD8547E-84D6-44BE-80D6-FCB2D4C23AE4")]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(ITestActiveX))]
public class TestActiveX : ITestActiveX
{
public void Active()
{
Console.WriteLine("Active");
}
public void Deactive()
{
Console.WriteLine("Deactive");
}
public void Quit()
{
Console.WriteLine("Quit");
}
}
}
-
生成和发布ActiveX控件
-
命令行发布
在生成之后,使用Visual Studio提供的工具regasm.exe命令行注册活动X控件。具体将代码打包到DemoActiveX.dll中:
regasm DemoActiveX.dll /tlb
- 使用安装程序发布
使用安装程序发布ActiveX控件,步骤包括:
- 保存并关闭Visual Studio 2019
- 单击“开始”,然后在搜索框中输入“Visual Studio Installer”。
- 选择“Visual Studio Installer”并单击“打开”。
- 单击“新建”。
- 在“新增项目”窗口中选择“Windows桌面向导”。
- 单击“下一步”。
- 在“选择类型”页面上,选择“自定义”并单击“下一步”。
- 在“选择容器”页面上,选择“MSI源”并单击“下一步”。
- 在“项目属性”窗口中,更改版本号,然后单击“下一步”。
- 在“准备内容”页面上,单击“添加”。
- 在弹出的窗口中选择“项目输出”。
- 将输出类型从“content files”更改为“ActiveX控件”并单击“OK”。
- 在“准备内容”页面上,单击“下一步”。
- 在“输出窗口”(底部的输出视图窗口)中,查看安装器项目创建的输出。
- 单击“创建”。
- 双击创建的.msi文件,以启动安装过程。
-
安装结束后,可以在IE浏览器中使用该ActiveX控件。
-
使用ActiveX控件
在HTML文件中插入以下代码:
<!DOCTYPE html>
<html>
<head>
<script language="JavaScript">
function GetActiveXObject() {
try {
var axControl = new ActiveXObject("TestActiveX.TestActiveX");
axControl.Active();
axControl.Deactive();
axControl.Quit();
} catch (err) {
alert("Could not create the ActiveX control");
}
}
</script>
</head>
<body>
<button onclick="GetActiveXObject()">Click here to trigger the ActiveX control</button>
</body>
</html>
- 运行测试程序
运行HTML文件测试ActiveX控件,观察控制台输出结果并确保能够正常使用。
以上是使用C#编写ActiveX控件的完整攻略,包含了至少两个示例供参考。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用C#编写ActiveX控件(二) - Python技术站