COM、ActiveX与ActiveXDLL和ActiveXEXE:探索组件化开发的潜力(附图代码及关系详解)

简介: COM、ActiveX与ActiveXDLL和ActiveXEXE:探索组件化开发的潜力(附图代码及关系详解)

背景

前面写过一篇关于数据库技术的文章,加上正在重温vb,对于里面接触最多的ActiveX组件涉及的很多概念,总觉得他们之间的关系没有足够,所以决定再深入研究一下,先附上上一篇的链接: 数据库访问和组件技术相关概念(ADO、ActiveX、DLL、ODBC等)详解

名词详解

还是先把本文要讲的一些概念简单说一下

com

在计算机编程领域,COM(Component Object Model)是一个重要的概念,它为开发人员提供了一种在不同平台和语言之间进行软件组件交互的标准。在COM的基础上,衍生出了ActiveX、ActiveX DLL和ActiveX EXE等技术,它们在软件开发和应用中扮演着重要的角色。

COM是一种面向对象的软件组件技术,它允许以组件的形式将代码封装起来,并提供给其他程序使用。COM组件可以使用不同的编程语言编写,并且可以在不同的操作系统和平台上运行。COM组件之间的交互通过接口进行,这使得组件之间的通信更加灵活和可靠。

提炼一下:com是一个标准也是一项技术,主打一个跨平台跨语言,复用,另外二进制兼容,版本控制。

ActiveX

ActiveX是基于COM的技术,是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM),它允许开发人员创建可嵌入到网页或其他应用程序中的交互式控件。ActiveX控件可以使用HTML、JavaScript等前端技术进行开发,并且可以在不同的浏览器和操作系统上运行。它广泛应用于网页浏览器插件、多媒体播放器、图形编辑器等领域。当然在

提炼:基于com规范,是Microsoft提出的一个标准

ActiveX DLL

ActiveX DLL是一种动态链接库,它包含了COM组件的实现代码和相关资源。通过使用ActiveX DLL,开发人员可以将特定功能封装为一个组件,并在不同的应用程序中共享和重用。ActiveX DLL常用于开发可扩展的应用程序、插件和服务。

提炼:ActiveX DLL是一种特殊的DLL,它包含com对象。

ActiveX DLL是进程内服务器,和调用它的app属于同一个进程,称之为进程内服务器

示例代码:

' ActiveX DLL示例
Public Class MyComponent
    Public Function Add(ByVal a As Integer, ByVal b As Integer) As Integer
        Return a + b
    End Function
End Class

ActiveX EXE

ActiveX EXE是一种独立的可执行文件,它包含了COM组件的实现代码和相关资源。与ActiveX DLL不同的是,ActiveX EXE以进程的形式运行,并提供了更高的安全性和隔离性。ActiveX EXE常用于开发独立的后台服务、服务器端组件和可执行文件。

,ActiveX EXE服务器进程和客户进程是两个独立的进程,称之为进程外服务器,两者的通信是通过消息传递机制完成的

示例代码:

' ActiveX EXE示例
Public Class MyServer
    Public Function Multiply(ByVal a As Integer, ByVal b As Integer) As Integer
        Return a * b
    End Function
End Class

ActiveX DLL与ActiveX EXE的关系和区别

ActiveX DLL和ActiveX EXE都是基于COM的技术,用于创建和使用可重用的软件组件。

关系

  1. 共同点:ActiveX DLL和ActiveX EXE都是基于COM的技术,它们都使用COM接口进行组件之间的通信和交互。无论是ActiveX DLL还是ActiveX EXE,都可以被其他程序引用和使用。
  2. 依赖关系:ActiveX EXE可以使用ActiveX DLL,但ActiveX DLL不能直接使用ActiveX EXE。ActiveX EXE可以将ActiveX DLL作为其依赖项,通过COM接口进行调用和交互。

区别

  1. 运行方式:ActiveX DLL以动态链接库的形式存在,它被其他程序动态加载并调用(进程内服务器)。而ActiveX EXE是一个独立的可执行文件(进程外服务器),以进程的形式运行。
  2. 安全性和隔离性:ActiveX EXE相对于ActiveX DLL具有更高的安全性和隔离性。由于ActiveX EXE以进程的形式运行,它可以提供更好的隔离性,避免因为组件错误导致整个应用程序崩溃。
  3. 调用方式:ActiveX DLL的调用是通过函数调用的方式进行的,而ActiveX EXE的调用是通过远程过程调用(RPC)来实现的。这意味着ActiveX EXE可以在不同的计算机上运行,并通过网络进行远程调用。
  4. 性能:ActiveX DLL相对于ActiveX EXE具有更好的性能。由于ActiveX DLL是以动态链接库的形式存在,它的调用和交互过程更加高效和快速。而ActiveX EXE由于需要通过进程间通信(IPC)进行调用,因此会有一定的性能损耗。

如何选择:

选择使用ActiveX DLL还是ActiveX EXE取决于具体的需求和应用场景。

  • 如果需要创建一个可嵌入到其他应用程序中的组件,并且对性能要求较高,可以选择使用ActiveX DLL。
  • 如果需要创建一个独立的后台服务、服务器端组件或可执行文件,并且对安全性和隔离性要求较高,可以选择使用ActiveX EXE。

下面是一个二维表,总结了ActiveX DLL和ActiveX EXE的关系和区别:

ActiveX DLL ActiveX EXE
运行方式 动态链接库 可执行文件
安全性和隔离性 较低 较高
调用方式 函数调用 远程过程调用
性能 较好 较差
应用场景 嵌入其他应用程序 独立后台服务、服务器端组件、可执行文件

名词之间的关系

图示

解释

1、COM是一种规范,实现组件的复用和扩展。

2、ActiveX是基于COM的微软提出的一种标准。(它是一种技术框架,用于创建和使用可重用的软件组件。ActiveX技术可以用于多种编程语言和平台,包括Visual Basic(VB),C++,.NET等。)

3、vb可创建的组件(也叫代码部件)包括ActiveX控件、ActiveX DLL和ActiveX EXE, 它们都属于ActiveX组件的一种形式,它们都遵循了ActiveX技术标准,并可以被其他程序调用和使用,类似于一个服务。所以ActiveX DLL和ActiveX EXE也可以称之为服务。

在这个层次结构中,COM提供了组件之间的通信和交互的规范,ActiveX是基于COM的技术框架,提供了创建和使用组件的方式,而ActiveX控件、ActiveX DLL和ActiveX EXE则是在ActiveX技术之上创建的具体组件类型(也可以称之为服务)。

另外关于DLL和com的区别在我上面提到的文章中有讲解,也有配图,欢迎到上面点击链接进行阅读。

代码

现在给一段代码,用来创建一个ACtiveDLL部件,同时创建测试类测试这个ACtiveDLL代码部件是否成功

首先,创建一个新的VB6.0项目,选择ActiveX DLL作为项目类型。

  1. 在"Class1"模块中编写以下代码:
Option Explicit
Public Function AddNumbers(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
    AddNumbers = num1 + num2
End Function

上述代码定义了一个名为"AddNumbers"的函数,它接受两个整数参数并返回它们的和。

  1. 在"Class2"模块中编写以下代码:
Option Explicit
Public Sub TestDLL()
    Dim obj As New Class1
    Dim result As Integer
    result = obj.AddNumbers(5, 10)
    MsgBox "Result: " & result
End Sub

上述代码定义了一个名为"TestDLL"的子过程,它创建了一个Class1对象,并调用其中的AddNumbers函数来计算5和10的和。然后,它使用消息框显示计算结果。

  1. 在"Project1"模块中编写以下代码:
Option Explicit
Public Sub Main()
    Dim obj As New Class2
    obj.TestDLL
End Sub

上述代码定义了一个名为"Main"的子过程,它创建了一个Class2对象,并调用其中的TestDLL子过程。

  1. 在项目菜单中选择"添加类模块",创建一个名为"Class3"的新类模块。
  2. 在"Class3"模块中编写以下代码:
Option Explicit
Public Sub Test()
    Dim obj As New Class1
    Dim result As Integer
    result = obj.AddNumbers(8, 3)
    MsgBox "Result: " & result
End Sub

上述代码定义了一个名为"Test"的子过程,它创建了一个Class1对象,并调用其中的AddNumbers函数来计算8和3的和。然后,它使用消息框显示计算结果。

当运行该项目时,"Main"子过程将被调用,它将创建一个Class2对象并调用其中的TestDLL子过程。TestDLL子过程将创建一个Class1对象,并调用其中的AddNumbers函数来计算5和10的和,并将结果显示在消息框中。

另外,还可以在"Class3"模块中创建一个新的对象并调用其中的Test子过程来测试AddNumbers函数的功能。

附加问题

com组件技术只在vb中应用吗?

COM组件技术不仅限于在VB(Visual Basic)中应用,它可以在许多编程语言中使用。COM是一种面向对象的编程模型,它允许不同的软件组件在不同的编程语言中进行交互和通信。

ActiveX是一种基于COM的技术,它是一种软件组件规范,用于创建可重用的软件组件。ActiveX控件是一种特殊类型的COM组件,主要用于在Web浏览器中嵌入和展示交互式内容。虽然ActiveX最初在VB中得到广泛应用,但它也可以在其他编程语言中使用,例如C++、C#、Delphi等。

因此,COM组件技术和ActiveX不仅仅局限于VB,其他编程语言也可以使用它们来开发和使用可重用的软件组件。

java中有类似的技术吗?

在Java中,没有直接的COM组件技术或ActiveX控件,因为Java有自己的跨平台解决方案。Java使用Java虚拟机(JVM)来实现跨平台性,它提供了一种独立于操作系统的运行环境。

Java中有一种类似于COM组件的技术称为JavaBeans。JavaBeans是一种可重用的软件组件模型,它允许开发人员创建和使用独立的Java组件。JavaBeans是基于Java语言的,具有良好的跨平台性和可移植性。

此外,Java还提供了一种称为Java Native Interface(JNI)的技术,它允许Java代码与本地代码(如C或C++)进行交互。JNI可以用于与COM组件或其他本地库进行集成。

虽然Java中没有直接的COM组件技术或ActiveX,但JavaBeans和JNI提供了类似的功能,允许开发人员创建和使用可重用的软件组件,并与其他平台和技术进行交互。

我们要知道JavaBeans和JNI并不是比COM组件技术更高级的技术,它们是Java平台下的不同技术解决方案,用于不同的应用场景。

vb中工程中看到的引用和部件什么区别?



引用(Reference)是指在项目中引用外部库或组件,以便在代码中使用其功能。通过引用,可以使用其他库或组件的对象、属性和方法,以扩展VB6.0的功能。

部件(Component)是指VB6.0中的可重用的代码模块,可以是控件、类模块、标准模块等。部件可以包含属性、方法和事件,可以在项目中使用和重复利用。

组件(Component)是一个更广泛的概念,包括了部件。组件可以是独立的可执行文件、动态链接库(DLL)或ActiveX控件等,可以被其他程序调用和使用。

引用和部件的关系是,通过引用外部库或组件,可以将其部件引入到VB6.0项目中,以便使用其中的功能。

可以用比喻来解释:假设你正在建造一座房子,引用就是你从外面购买了一些材料,比如砖、水泥等。而部件就是你自己制作的一些模块,比如门、窗等。组件就是包括了这些材料和部件的整体,比如房子本身。


总结

COM、ActiveX、ActiveX DLL和ActiveX EXE是软件开发中非常重要的技术。它们通过提供标准的组件交互方式,实现了代码的重用和功能的扩展。通过学习和应用这些技术,开发人员可以更加高效地开发出功能强大且可扩展的应用程序。希望本文让你对COM、ActiveX、ActiveX DLL和ActiveX EXE有更深入的了解,并能在实际项目中应用这些技术提供了帮助。

相关文章
|
5月前
|
前端开发 Java UED
JSF 面向组件开发究竟藏着何种奥秘?带你探寻可复用 UI 组件设计的神秘之路
【8月更文挑战第31天】在现代软件开发中,高效与可维护性至关重要。JavaServer Faces(JSF)框架通过其面向组件的开发模式,提供了构建复杂用户界面的强大工具,特别适用于设计可复用的 UI 组件。通过合理设计组件的功能与外观,可以显著提高开发效率并降低维护成本。本文以一个具体的 `MessageComponent` 示例展示了如何创建可复用的 JSF 组件,并介绍了如何在 JSF 页面中使用这些组件。结合其他技术如 PrimeFaces 和 Bootstrap,可以进一步丰富组件库,提升用户体验。
62 0
|
5月前
|
C# Windows 监控
WPF应用跨界成长秘籍:深度揭秘如何与Windows服务完美交互,扩展功能无界限!
【8月更文挑战第31天】WPF(Windows Presentation Foundation)是 .NET 框架下的图形界面技术,具有丰富的界面设计和灵活的客户端功能。在某些场景下,WPF 应用需与 Windows 服务交互以实现后台任务处理、系统监控等功能。本文探讨了两者交互的方法,并通过示例代码展示了如何扩展 WPF 应用的功能。首先介绍了 Windows 服务的基础知识,然后阐述了创建 Windows 服务、设计通信接口及 WPF 客户端调用服务的具体步骤。通过合理的交互设计,WPF 应用可获得更强的后台处理能力和系统级操作权限,提升应用的整体性能。
133 0
|
5月前
|
容器 C# 开发者
XAML语言大揭秘:WPF标记的魅力所在,让你轻松实现界面与逻辑分离,告别复杂代码!
【8月更文挑战第31天】XAML提供了一种直观且易于维护的界面设计方式,使得开发者可以专注于逻辑和业务代码的编写,而无需关心界面细节。通过数据绑定、布局管理和动画效果等特性,XAML可以实现丰富的界面交互和视觉效果。在实际开发过程中,开发者应根据具体需求选择合适的技术方案,以确保应用程序能够满足用户的需求。希望本文的内容能够帮助您在WPF应用程序开发中更好地利用XAML语言。
51 0
|
5月前
|
开发者 C# 存储
WPF开发者必读:样式与模板的艺术,轻松定制UI外观,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,样式与模板是实现美观界面与一致性的关键工具。样式定义了控件如字体、颜色等属性,而模板则允许自定义控件布局与子控件,两者均可存储于`.xaml`文件中。本文介绍了样式与模板的基础知识,通过示例展示了如何创建并应用它们来改变按钮的外观,从而提升用户体验。
112 0
|
7月前
|
Swift
技术好文共享:第七章美化DetailView界面
技术好文共享:第七章美化DetailView界面
|
8月前
|
存储 运维 算法
软件体系结构 - 架构风格(3)主程序/子程序架构风格
【4月更文挑战第21天】软件体系结构 - 架构风格(3)主程序/子程序架构风格
469 0
|
前端开发 定位技术 容器
webgis前端控件编程
webgis前端控件编程
101 0
|
JavaScript 前端开发 数据库
Unity3d(webGL)构建数字孪生小案例(包含完整的数据交互体系)附赠完整代码
Unity3d(webGL)构建数字孪生小案例(包含完整的数据交互体系)附赠完整代码,请关注公众号:拼搏的小浣熊,获取简化版的代码!
文字处理技术:试图通过多次布局解决布局问题的思路是否可以避免?
文字处理技术:试图通过多次布局解决布局问题的思路是否可以避免?
116 0
文字处理技术:正式开始新布局工作
文字处理技术:正式开始新布局工作
124 0

热门文章

最新文章