用C#编写ActiveX控件(二)

这里是详细讲解“用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页面中使用标记将ActiveX控件嵌入页面中,并调用其中公开的方法和属性进行操作:

例如:

    <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。

  1. 创建Visual Studio项目

首先创建一个Class Library (.NET Framework) 项目。

  1. 编写程序

向项目添加请求将计算器类导出为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;
        }
    }
}
  1. 生成和发布ActiveX控件

在项目菜单上,选择“生成”->“生成解决方案”选项,生成项目代码。在此过程中,Visual Studio生成ActiveX控件DLL文件。

  1. 将ActiveX控件注册到系统

在Visual Studio“管理器”中,右键单机控件库项目,选择“注册”选项,将ActiveX DLL文件注册到系统。

  1. 测试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>
  1. 运行测试程序

运行HTML文件测试ActiveX控件是否能够正常使用。

示例二

该示例编写一个带有激活和退出事件的ActiveX控件。

  1. 创建Visual Studio项目

我们使用“Windows控制台应用程序”模板创建C#控制台应用程序项目。

  1. 编写程序
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");
        }
    }
}
  1. 生成和发布ActiveX控件

  2. 命令行发布

在生成之后,使用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>
  1. 运行测试程序

运行HTML文件测试ActiveX控件,观察控制台输出结果并确保能够正常使用。

以上是使用C#编写ActiveX控件的完整攻略,包含了至少两个示例供参考。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用C#编写ActiveX控件(二) - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • winform中的ListBox和ComboBox绑定数据用法实例

    下面是“winform中的ListBox和ComboBox绑定数据用法实例”的攻略。 1. ListBox绑定数据用法实例 1.1 创建ListBox控件并绑定数据源 在WinForm窗体设计界面添加一个ListBox控件,并在代码中使用以下方式绑定数据源: private void Form1_Load(object sender, EventArgs e…

    C# 2023年6月7日
    00
  • C#中的集合用法分析

    C#中的集合用法分析 在C#中,集合是常用的数据类型,它可以存储一组元素,并提供了一些常用的数据操作方法,比如添加、删除、查找、排序等。本文将详细讲解C#中集合的用法。 集合类型 C#中提供了多种集合类型,比较常用的包括List、Dictionary、HashSet等。下面分别介绍它们的用法。 List List是一种动态数组,可以存储任意类型的元素。Lis…

    C# 2023年6月7日
    00
  • winform实现可拖动的自定义Label控件

    下面是实现winform可拖动自定义Label控件的攻略。 准备工作 新建winform项目,打开Visual Studio。 添加一个类库项目,用于编写自定义控件。 在类库项目中添加Winform命名空间,引用该命名空间中的控件。 编写自定义控件 在类库项目中新建一个类,继承自Label控件。 重写OnMouseDown、OnMouseMove、OnMou…

    C# 2023年6月1日
    00
  • .NetCore手动封装日志组件的实现代码

    手动封装日志组件是一种常见的.NET Core开发技巧,可以帮助我们更好地管理和记录应用程序的日志信息。下面是手动封装日志组件的实现代码攻略: 创建日志组件类:首先,我们需要创建一个日志组件类。我们可以在.NET Core应用程序中创建一个名为Logger的类,并添加以下代码: using System; public class Logger { publ…

    C# 2023年5月16日
    00
  • Unity封装延时调用定时器

    下面是Unity封装延时调用定时器的完整攻略: 1. 创建Timer类 首先,我们需要创建一个Timer类,用来实现延时和定时功能。这个类应该至少有以下几个方法: Timer(float duration, Action callback):构造函数,接收一个duration参数表示延时或者定时的时间(单位为秒),和一个callback回调函数,在延时或定时…

    C# 2023年6月3日
    00
  • C#使用System.Buffer以字节数组Byte[]操作基元类型数据

    操作基元类型数据时,我们通常需要进行数据类型转换,进行字节序列转换。而C#中的System.Buffer类提供了方便的功能,可以以字节数组Byte[]的形式对基本类型进行操作。以下是C#使用System.Buffer以字节数组Byte[]操作基元类型数据的完整攻略: 1. 引入命名空间 为了使用System.Buffer类,必须在代码中引入该命名空间。在代码…

    C# 2023年6月8日
    00
  • C# 10个常用特性汇总

    C# 10个常用特性汇总 在本文中,我们将介绍 C# 中的10个常用特性及其用例,包括: 可空引用类型(Nullable reference types) 模式匹配(Pattern matching) 捕获块(Catch block) 局部函数(Local functions) 海象运算符(Null coalescing assignment operato…

    C# 2023年6月7日
    00
  • 理解ASP.NET Core 配置系统

    理解ASP.NET Core 配置系统 在ASP.NET Core应用程序中,配置系统是一项非常重要的任务。配置系统可以帮助我们管理应用程序的配置信息,提高应用程序的可维护性和可扩展性。在本攻略中,我们将介绍ASP.NET Core配置系统的基本概念和使用方法,并提供两个示例说明。 1. 配置系统的基本概念 在ASP.NET Core应用程序中,配置系统是由…

    C# 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部