用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日

相关文章

  • ASP.NET Core MVC 从入门到精通之布局

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启…

    C# 2023年4月18日
    00
  • C#中LINQ to DataSet操作及DataTable与LINQ相互转换

    C#中LINQ to DataSet操作及DataTable与LINQ相互转换 简介 LINQ to DataSet是指使用LINQ技术访问和操作DataSet对象的数据。使用LINQ to DataSet可以将DataSet中的数据以一个强类型的方式表示出来,并且可以直接使用LINQ语言进行过滤、匹配和排序。 同时,DataTable与LINQ之间也可以进…

    C# 2023年6月1日
    00
  • C++通过Callback向C#传递数据的方法

    使用Callback是一种将C++代码与C#代码连接起来的常用方法。下面是C++通过Callback向C#传递数据的方法的详细攻略。 1.创建一个C#回调方法 首先,需要在C#代码中创建一个接受C++回调的方法。这个方法的参数应该和C++回调方法的参数保持一致,以确保能够正确地接收数据。代码示例如下: public delegate void Callbac…

    C# 2023年6月7日
    00
  • 详解C#中SqlParameter的作用与用法

    详解C#中SqlParameter的作用与用法 在C#中,SqlParameter是用于向SQL Server数据库发送参数化查询的类。它可以帮助我们避免SQL注入攻击,并提高查询性能。本文将提供详细的“详解C#中SqlParameter的作用与用法”的完整攻略,包括SqlParameter的作用、SqlParameter的用法以及两个示例。 SqlPara…

    C# 2023年5月15日
    00
  • C# Winform 分页功能的实现

    下面是关于C# Winform分页功能实现的完整攻略: 1. 什么是分页功能 分页,在信息管理系统中常见的一种数据查找方式,数据量比较大的时候,把所有数据都一次性请求会导致页面响应时间过长,从而影响用户体验。因此,常规情况下需要对请求的数据进行分页处理,通过分页显示相应的数据,让用户能够更快更方便的查看信息。 2. 分页功能的实现 2.1 数据库存储分页信息…

    C# 2023年5月31日
    00
  • C#使用foreach语句搜索数组元素的方法

    当我们需要搜索一个数组中的元素时,可以使用C#中的foreach语句来实现。以下是使用foreach语句搜索数组元素的步骤: 1. 创建一个数组 在开始搜索数组元素之前,需要先创建一个数组,并向其中添加元素。例如,我们要创建一个包含数字1到5的数组,可以使用以下代码: int[] numArray = new int[] {1, 2, 3, 4, 5}; 2…

    C# 2023年6月8日
    00
  • matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析

    Matplotlib是一个具有强大绘图功能的Python库,其运行时配置(Runtime Configuration,rc)参数rcParams可以设置绘图参数,如字体大小、线条宽度、颜色等,使得Matplotlib绘图更加个性化、符合需求。 rcParams是一个Python字典对象,包含了Matplotlib的所有绘图参数设置。可以通过修改字典中的键值对…

    C# 2023年5月31日
    00
  • 详解如何在ASP.NET Core中应用Entity Framework

    如何在 ASP.NET Core 中应用 Entity Framework Entity Framework 是一个对象关系映射(ORM)框架,可以将数据库中的数据映射到 .NET 对象中。在 ASP.NET Core 中,可以使用 Entity Framework 来访问和操作数据库。本攻略将详细介绍如何在 ASP.NET Core 中应用 Entity …

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