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有更深入的了解,并能在实际项目中应用这些技术提供了帮助。

相关文章
|
2月前
|
设计模式 XML 前端开发
从设计蓝图到代码奇迹:揭秘Uno Platform如何让你用MVVM模式玩转跨平台开发,一次编写,处处惊艳,开发者必看秘籍!
本文详细介绍了如何在 Uno Platform 上运用设计模式,实现从设计到代码的优雅过渡。 Uno Platform 承诺“一次编写,到处运行”,简化了跨平台开发。文中以 MVVM 模式为例,通过定义 Model、ViewModel 和 View 层,展示了其在 Uno Platform 中的具体应用,包括数据绑定和 UI 更新机制。通过这些步骤,不仅简化了跨平台 UI 开发,还提升了应用的响应性和可维护性,为开发者提供了一种高效的解决方案。
53 2
|
2月前
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
180 3
|
3月前
|
前端开发 Java UED
JSF 面向组件开发究竟藏着何种奥秘?带你探寻可复用 UI 组件设计的神秘之路
【8月更文挑战第31天】在现代软件开发中,高效与可维护性至关重要。JavaServer Faces(JSF)框架通过其面向组件的开发模式,提供了构建复杂用户界面的强大工具,特别适用于设计可复用的 UI 组件。通过合理设计组件的功能与外观,可以显著提高开发效率并降低维护成本。本文以一个具体的 `MessageComponent` 示例展示了如何创建可复用的 JSF 组件,并介绍了如何在 JSF 页面中使用这些组件。结合其他技术如 PrimeFaces 和 Bootstrap,可以进一步丰富组件库,提升用户体验。
55 0
|
3月前
|
容器 iOS开发 Linux
震惊!Uno Platform 响应式 UI 构建秘籍大公开!从布局容器到自适应设计,带你轻松打造跨平台完美界面
【8月更文挑战第31天】Uno Platform 是一款强大的跨平台应用开发框架,支持 Web、桌面(Windows、macOS、Linux)及移动(iOS、Android)等平台,仅需单一代码库。本文分享了四个构建响应式用户界面的最佳实践:利用布局容器(如 Grid)适配不同屏幕尺寸;采用自适应布局调整 UI;使用媒体查询定制样式;遵循响应式设计原则确保 UI 元素自适应调整。通过这些方法,开发者可以为用户提供一致且优秀的多设备体验。
140 0
|
3月前
|
容器 C# 开发者
XAML语言大揭秘:WPF标记的魅力所在,让你轻松实现界面与逻辑分离,告别复杂代码!
【8月更文挑战第31天】XAML提供了一种直观且易于维护的界面设计方式,使得开发者可以专注于逻辑和业务代码的编写,而无需关心界面细节。通过数据绑定、布局管理和动画效果等特性,XAML可以实现丰富的界面交互和视觉效果。在实际开发过程中,开发者应根据具体需求选择合适的技术方案,以确保应用程序能够满足用户的需求。希望本文的内容能够帮助您在WPF应用程序开发中更好地利用XAML语言。
44 0
|
3月前
|
C# Windows 监控
WPF应用跨界成长秘籍:深度揭秘如何与Windows服务完美交互,扩展功能无界限!
【8月更文挑战第31天】WPF(Windows Presentation Foundation)是 .NET 框架下的图形界面技术,具有丰富的界面设计和灵活的客户端功能。在某些场景下,WPF 应用需与 Windows 服务交互以实现后台任务处理、系统监控等功能。本文探讨了两者交互的方法,并通过示例代码展示了如何扩展 WPF 应用的功能。首先介绍了 Windows 服务的基础知识,然后阐述了创建 Windows 服务、设计通信接口及 WPF 客户端调用服务的具体步骤。通过合理的交互设计,WPF 应用可获得更强的后台处理能力和系统级操作权限,提升应用的整体性能。
105 0
|
3月前
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
160 0
|
6月前
|
人工智能 前端开发 JavaScript
【前端设计】HTML+CSS+JavaScript基本特性
【前端设计】HTML+CSS+JavaScript基本特性
|
6月前
|
搜索推荐 iOS开发 开发者
利用SwiftUI构建动态用户界面:iOS开发新篇章
【4月更文挑战第10天】在移动应用的世界中,流畅的用户体验和引人注目的界面设计是至关重要的。随着SwiftUI的推出,iOS开发者被赋予了创造高度动态且响应式界面的能力。本文将深入探讨如何利用SwiftUI的强大特性来实现一个动态用户界面,包括其声明性语法、状态绑定以及视图更新机制。我们将通过一个天气应用案例,了解如何有效地运用这些工具来提升应用的交互性和视觉吸引力。
|
6月前
|
开发工具 Swift iOS开发
利用SwiftUI构建动态用户界面:iOS开发新范式
【4月更文挑战第3天】 随着苹果不断推进其软件开发工具的边界,SwiftUI作为一种新兴的编程框架,已经逐渐成为iOS开发者的新宠。不同于传统的UIKit,SwiftUI通过声明式语法和强大的功能组合,为创建动态且响应式的用户界面提供了一种更加简洁高效的方式。本文将深入探讨如何利用SwiftUI技术构建具有高度自定义能力和响应性的用户界面,并展示其在现代iOS应用开发中的优势和潜力。