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

相关文章

  • 浅谈C#在网络波动时防重复提交的方法

    浅谈C#在网络波动时防重复提交的方法 在Web开发中,防止重复提交是一个非常常见的问题。当网络波动或者用户重复点击提交按钮时,很容易导致重复提交。本文将介绍一些C#在防止重复提交方面的方法,希望能帮助大家解决这个问题。 方案1:使用Session来控制重复提交 在C#中,可以使用Session来控制重复提交。每次提交请求时,将表单提交的信息与Session中…

    C# 2023年6月2日
    00
  • C#中使用Interlocked进行原子操作的技巧

    C# 中使用 Interlocked 进行原子操作的技巧 Interlocked 类是一个提供了一些原子操作的类型,可以用来进行多线程编程中的非阻塞同步,解决并发冲突的问题。Interlocked 类提供了一些原子操作,包括自增、自减、交换、比较和交换等操作。在 C# 中使用 Interlocked 进行原子操作有一些技巧,下面就进行详细讲解: 初始化 首先…

    C# 2023年6月6日
    00
  • C#事件标准命名规则及说明(包括用作事件类型的委托命名)

    下面是关于“C#事件标准命名规则及说明(包括用作事件类型的委托命名)”的完整攻略。 1. 事件标准命名规则 1.1 委托命名 在C#中,常用委托命名作为事件的类型,因此委托的命名很关键。根据Microsoft官方文档的建议,委托命名应该基于事件的名称以及命名以EventHandler结尾。例如,声明一个叫做“ButtonClick”的事件,应该使用以下的委托…

    C# 2023年5月15日
    00
  • Unity实现图片水印生成

    下面就来详细讲解如何实现“Unity实现图片水印生成”的完整攻略。 需求分析 在实现图片水印生成之前,我们需要先对需求进行分析: 将水印添加到图片上 水印可配置:水印文字内容、字体、大小、颜色、位置、透明度等 输出带水印的图片 实现步骤 1. 下载字体文件 首先我们需要下载所需的字体文件。可以在字体网站上寻找并不断尝试,也可以在自己电脑上的字体目录中找到。 …

    C# 2023年6月3日
    00
  • C#判断三角形的类型

    想要判断一个三角形的类型,我们需要知道它的三条边长。以下是判断三角形类型的完整攻略: 步骤一:获取三角形的边长 需要获取三角形三条边的长度,可以通过用户输入、数据库或者其他数据源来获得。在此示例中,我们假设有三个变量 a、b、c 分别存储三角形的三条边长。 步骤二:判断是否为三角形 要判断一个三角形的类型,首先需要确定它是否是三角形。三角形的判定规则是任意两…

    C# 2023年6月7日
    00
  • Asp.Net获取网站截图的实例代码

    获取网站截图在许多情况下是非常有用的,例如制作网站的预览图或者进行网站活动的可视化展示。在 Asp.Net 中,我们可以使用 WebBrowser 控件来实现这一功能。 以下是获取网站截图的实例代码: 步骤一:安装并使用 WebBrowser 控件 首先需要在 Asp.Net 项目中使用 WebBrowser 控件,借助于该控件,可以实现让程序自动打开网站并…

    C# 2023年5月31日
    00
  • C#中字符串优化String.Intern、IsInterned详解

    C#中字符串优化String.Intern、IsInterned详解 什么是字符串优化 在 C# 中,字符串是不可变类型,每次对字符串进行操作时都会产生新的字符串对象。这就意味着如果我们频繁地对字符串进行操作,就会造成很多对象的额外开销。所以为了减少这种开销,我们需要对字符串进行优化。 字符串优化的方法有很多,其中一种方法是使用 String.Intern …

    C# 2023年5月31日
    00
  • C#面向对象编程中开闭原则的示例详解

    C#面向对象编程中开闭原则的示例详解 什么是开闭原则 开闭原则(Open-Closed Principle)是面向对象编程中的一个重要原则,其定义如下: 软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。 也就是说,在软件设计的过程中,可以通过扩展已有的代码来增加新的功能,而不需要修改原有的代码。 如何实现开闭原则 使用抽象类或接口 使用抽象类或接口可…

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