COM原理及应用---- 自动化(Automation)对象

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

1、自动化技术

       自动化技术既以前提到的OLE自动化。虽然自动化技术建立在COM基础上,但自动化要比COM应用广泛得多。一方面,自动化继承了COM的很多优点,比如语言无关、进程透明等特性;另一方面,自动化简化了COM的一些底层细节,比如属性和方法的处理、一组专用于自动化的数据类型等。自动化也是OLE的基础,所以可以把自动化看作COM和OLE中间的一项技术。自动化的核心是IDispatch接口,每一个自动化对象都必须实现IDispatch接口。自动化技术并不复杂,它实际上是COM的一个特例。

 

2、自动化产生与发展

       COM的语言无关性在使用一些弱类型的高级语言时很受限制,而自动化为这些高级语言提供了另一条程序相互通信的直观且友好的途径。

       自动化技术的发展与Visual Basic和VBA有直接的关系。首先,VBA(或VBScript)已经发展成为大多数Microsoft应用程序扩展的标准,其次,Microsoft Visual Basic开发工具的成功应用也推动了自动化对象的发展。自动化技术为Visual Basic与其他语言的协作开发提供了一条捷径。

       通过自动化编程接口,不同应用程序之间的通信可以在VBA或者VBScript层次上进行,甚至根本不需要知道列集和RPC调用的概念。自动化是位于上层(应用层)的组件技术,它可以面对最终用户,比如宏语言编程。

       自动化对象的IDispatch接口可以作为OLE的标准接口,由于OLE已经提供了标准的接口代理和存根组件,所以自动化对象即可以运行在DLL组件中,也可以运行在EXE组件中。如果在分布式环境下,那么自动化对象可以被远程客户创建或连接。

 

3、属性和方法

       方法(method)和属性(property)是自动化对象的两个基本特性,方法是指自动化对象所提供的功能服务;而属性是指自动化对象的数据特征。

       从本质上讲,属性是一个值,它既可以被设置,也可以被获取。

       方法要比属性灵活得多,它们可以具有零个或多个参数,它们既可以设置也可以获取对象数据,最常见的是完成某些动作。

       自动化对象的属性和方法都有符号化的名字,客户程序通过名字就可以访问到自动化对象的属性或者方法。

 

4、类型库和ODL

       组件对象的类型信息是指它与外界进行交互的一些必要信息,包括组件的CLSID、它所支持接口的IID、接口的每个成员函数、成员函数的参数和返回值类型等等,类型信息中的数据类型也可以是自定义的数据类型,如C语言风格的结构、联合、枚举等。

       Microsoft扩充了IDL形成ODL(object description language ,对象描述语言),可以描述组件对象的类型信息。一般来说,一个组件对象的类型信息包括每个接口的类型信息和对象的类型信息,接口类型信息的描述方法与IDL完全兼容。接口类型信息使用interface 或dispinterface 关键字描述;对象类型信息使用coclass关键字进行描述。每个ODL文件可以描述多个组件对象,经过MIDL或者MkTypLib工具可编译得到类型库。通常把一个组件程序中的所有对象放在一个ODL文件中,并用library关键字描述库信息,包括类型库的ID(即LIBID)、类型库所使用的语言、版本等。在ODL文件中也可以使用importlib引入其他类型信息。

       用MIDL实用工具编译ODL文件可以得到类型库文件,其后缀为TLB,也可以产生相应的.h头文件。

       使用类型库的好处有两点。一是VB或者VBA可以使用类型库来浏览组件对象的方法和属性,它也可以利用类型库增强对属性和方法的访问;二是在实现自动化对象的IDispatch接口时,可以利用类型库向客户程序提供类型信息,这可使我们避免繁琐的类型处理。

 

5、IDispatch接口

       成员函数Invoke是个关键函数,客户程序必须通过Invoke函数才能访问属性或方法,也可以说Invoke函数是自动化对象的命令翻译器。

 

6、自动化兼容的数据类型

       自动化对象使用的基本数据类型为VCRIANT结构类型。整个VARIANT结构的大小为16字节,但它描述了所有自动化对象可以使用的数据类型。

 

7、IDispatchEx接口

       IDispatch接口描述的类型信息是静态的,在运行过程中类型信息不会被改变,在编译时刻通过类型库就可以获得所有的类型信息。然而,在一些脚本语言中,我们需要在运行时刻动态提供类型信息,IDispatchEx接口这是适应这样的要求而建立起来的,它继承了IDispatch接口的成员函数。

 

8、自动化对象实现——类型库支持

      

9、自动化对象实现——Invoke函数实现

      

10、自动化对象实现——异常处理

      

11、自动化对象实现——多语种,本地化

      

12、自动化对象实现——用CreateStdDispatch函数实现自动化对象

      

13、自动化对象应用——双接口

       自动化控制器通过IDispatch接口可以调用自动化对象的所有方法和属性,但由于这种调用是通过Invoke成员函数间接进行的,中间经过几重处理,调用的效率损失很大。当然这种方式为高级语言客户程序提供了极大的便利,不过有的客户程序不一定希望这种效率损失,它希望能够直接通过vtable调用到成员函数代码。为了同时满足这两种情形,自动化对象可以在实现IDispatch接口的基础上,把方法和属性函数也以接口成员函数的方法暴露出去,这样就形成了双接口(dual interface)的概念


 

14、自动化对象应用——迟绑定和早绑定

       由于自动化对象使用类型库对参数类型进行检查,而类型库文件独立于自动化组件,因此,不仅自动化对象可以利用类型库实现它的IDispatch成员函数,自动化控制器也可以利用类型库对方法或属性的参数进行检查。

如果自动化控制器利用对象的类型库,在编译时刻对参数类型和返回值类型进行检查,并直接用分发ID调用Invoke函数,我们把这种调用方法称为早绑定(early binding)技术。

相对应地,控制器也可以在运行时刻通过IDispatch接口的成员函数获得类型信息,当它访问一个属性或方法时,它要调用IDispatch::GetIDsOfNames,以便根据符号化名字找到分发ID,我们把这种调用称为迟绑定(late binding)技术。

选择使用早绑定或者迟绑定取决于控制器的运行环境,而调用效率并不成为判断的依据。

 

15、自动化对象应用——自动化集合对象

       集合对象也是一个自动化对象,但它有一些特殊的要求。首先,作为一组同类对象(或数值)的容器对象,它必须提供枚举这些成员的方法;其次,它必须支持Add、Remove和Item方法以及Count属性。

 

16、自动化对象应用——一IDispatch作为出接口

      

17、自动化对象应用——自动化控制器

      

18、自动化对象编程——MFC对自动化对象的支持

 

19、自动化对象编程——COleDispatchDriver类

 

20、自动化对象编程——在Visual Basic中使用自动化对象 

【CATIA的二次开发01】技术与原理 CATIA是达索系统开发的高端三维设计和工程软件,广泛应用于航空航天、汽车等领域。其二次开发技术允许用户通过编程扩展功能,实现自动化、定制化和集成化需求。主要技术包括AutomationAPI、CAA、Knowledgeware和脚本与宏。AutomationAPI基于COM技术,适用于自动化任务和简单界面定制,支持VBA、VB、C#等语言。CAA是CATIA的底层开发框架,基于C++,适用于高性能插件和深度定制功能。Knowledgeware通过规则和公式实现设计逻辑自动化,适用于参数驱动设计和规则校验。 阅读详情

相关推荐

C++集成Bartender实现自动化标签打印:COM接口调用与实战指南

在工业自动化和企业信息化系统中,软件集成是提升效率的关键环节。COMComponent Object Model)技术作为Windows平台的核心组件通信标准,允许不同编程语言应用程序之间进行互操作,是实现自动化流程的重要桥梁。其原理是通过定义标准的二进制接口,使客户端程序能够调用服务器程序提供的功能,从而将专业软件的能力集成到自定义业务系统中。这一技术价值在于能够复用成熟商业软件的强大功能,避免重复开发,显著降低系统集成的复杂度和维护成本。在物流仓储、生产制造等场景中,标签打印是连接数据流与物理世界的

weixin_30699955的博客 441

COM原理应用----自动化Automation对象

1、自动化技术      自动化技术既以前提到的OLE自动化。虽然自动化技术建立在COM基础上,但自动化要比COM应用广泛得多。一方面,自动化继承了COM的很多优点,比如语言无关、进程透明等特性;另一方面,自动化简化了COM的一些底层细节,比如属性和方法的处理、一组专用于自动化的数据类型等。自动化也是OLE的基础,所以可以把自动化看作COM和OLE中间的一项技术。自动化的核心是ID

snail8384的专栏 942

C++调用WPS Office自动化接口:从COM原理到实战代码详解

程序自动化是现代软件开发中的关键技术,它允许应用程序通过代码控制其他软件,实现批量化、无人值守的操作。其核心原理之一是COM(组件对象模型)技术,它定义了一套标准接口和通信协议,使不同程序能够安全、高效地交互。在办公自动化领域,通过COM接口操作Office套件(如WPS Office、Microsoft Office)已成为生成报告、处理数据和制作演示文稿的常见需求。对于追求高性能、低资源占用的C++开发者而言,直接使用COM自动化接口操作WPS,能够将文档处理深度集成到工业软件、后台服务等应用场景中,实

ithome 477

COM原理应用》学习笔记之第十一章

第11章 自动化Automation对象1、自动化技术       自动化技术既以前提到的OLE自动化。虽然自动化技术建立在COM基础上,但自动化要比COM应用广泛得多。一方面,自动化继承了COM的很多优点,比如语言无关、进程透明等特性;另一方面,自动化简化了COM的一些底层细节,比如属性和方法的处理、一组专用于自动化的数据类型等。自动化也是OLE的基础,所以可以把自动化看作COM和O

820

COM自动化使用电脑程序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、COM是什么?二、使用步骤1.打开EXCEL2.在Excel中打开文件总结 前言 Python有许多本地创建通用Microsoft Office文件类型的选项,包括Excel、Word和PowerPoint。然而,在某些情况下,使用纯python方法解决问题可能太困难了。幸运的是,python有一个名为pywin32的“python for Windows Extensions”包,它允许我们轻松地访问Windows的组.

foxirensheng的博客 1473

15.COM 自动化原理

简介COM自动化好处、原理和IDispatch接口实现细节。

文洲的专栏 2930

自动化Automation)基础概念:COM组件(Component)与接口(Interface)

COM组件(Component)与接口(Interface)许式伟 (版权声明)2007-3-12在前文,我预告了我将开始介绍WINX对自动化Automation)的支持。首先我打算解释一下自动化Automation)相关的概念。我们会分为3个篇幅介绍: COM基础:COM组件(Component)与接口(Interface) 变体(Variant)与ID

QBox/Golang/CERL/StdExt/TPL/WinxGui - 许式伟的专栏 8429

COM原理应用自动化Automation对象

1、自动化技术 自动化技术既以前提到的OLE自动化。虽然自动化技术建立在COM基础上,但自动化要比COM应用广泛得多。一方面,自动化继承了COM的很多优点,比如语言无关、进程透明等特性;另一方面,自动化简化了COM的一些底层细节,比如属性和方法的处理、一组专用于自动化的数据类型等。自动化也是OLE的基础,所以可以把自动化看作COM和OLE中间的一项技术。自动化的核心是ID...

weixin_30681615的博客 248

OLE控件与API函数

数据库天地 226

COM高级应用-Automation(自动化)已是昨日黄花不再"高级"?

在开发过程中,为提高内聚减少偶合,为系统的扩展性和维护性,通常都需要将不同的功能模块进行分离,即模块化,对于模块化,除了以传统的DLL方式外,应用COM组件方式构件系统应该是最佳选择.Automation自动化被作为COM组件技术的高级应用,在这,结合对其粗浅应用,简单说说Automation(自动化).温习的同时也希望能给初学者有点参考价值. 为方便说明自动化/普通的COM/普通

feijj2002_的专栏 3709

Python Win32com编程实战指南:COM组件交互与自动化开发

传递方式是否需要 AddRef是否需要 Release作为返回值传出是(生产者责任)接收方负责释放作为输入参数传入是(若长期保存)若保存则需匹配释放局部临时使用否使用结束后调用 ReleaseOLE Automation并非一个独立的技术体系,而是建立在COM基础之上的高级编程模型,旨在为解释型语言或缺乏指针操作能力的语言提供访问COM对象的能力。

weixin_36382073的博客 1635

VC++操作Excel实战指南:基于COM接口的Excel自动化技术

在现代企业级应用开发中,数据处理与报表生成是不可或缺的核心功能之一。Visual C++作为Windows平台下高性能系统开发的重要工具,具备直接操作Office组件的能力,尤其在与Microsoft Excel进行深度集成方面展现出强大的灵活性和控制力。本章将从整体架构层面阐述VC++如何通过COMComponent Object Model)技术实现对Excel的自动化控制,介绍其应用场景、技术优势以及与其他方案的对比。

weixin_42608318的博客 1115

从新手到专家:AI Automation Suggester自动化规则生成原理与高级参数调优

AI Automation Suggester是一款基于人工智能的Home Assistant集成工具,它能够自动扫描您的智能设备实体,检测新设备,并通过云端和本地API利用AI技术为您提供量身定制的自动化规则建议。支持多种AI服务提供商,包括OpenAI、Anthropic、Google、Groq、Ollama等,通过HASS通知为您推送自动化建议,让智能家庭管理变得更加智能高效。 ## 🌟

gitblog_00948的博客 342

IDispatch接口原理应用

IDispatch接口原理应用 目录: IDispatch接口原理应用... 1 目录:... 1 前言:... 1 IDispatch接口的定义:... 1 创建支持IDispatch接口的COM对象:... 4 标准方式调用IDispatch接口的方法:... 5 采用ATL智能指针类调用IDispat...

Dean Chen的专栏 4万+

CATIA VBA 二次开发(五)CATIA官方帮助文档【V5Automation

通过该部分可以一些使用案例;

lofaqan的博客 2287

开源桌面自动化Open Coworker:基于UI Automation的虚拟同事部署实战

机器人流程自动化(RPA)通过模拟用户操作实现业务流程自动化,其核心原理在于对图形用户界面(GUI)的识别与操控。传统RPA工具常依赖图像匹配,存在稳定性差、维护成本高等问题。而基于操作系统原生可访问性API(如Windows UI Automation)的方案,能直接获取控件的逻辑属性,实现分辨率无关的精准操作,大幅提升自动化脚本的健壮性和可维护性。这类技术在企业中具有极高价值,尤其适用于数据搬运、报表生成、系统监控等重复性桌面办公场景。本文探讨的开源项目Open Coworker,正是利用UI Auto

weixin_34378767的博客 410

repo-automation-bots与CI/CD集成:构建完整的自动化开发流水线终极指南

在现代软件开发中,自动化是提升效率和保证质量的关键。repo-automation-bots作为一个基于Probot的GitHub自动化机器人集合,为开源项目提供了完整的自动化解决方案。本文将详细介绍如何将repo-automation-bots与CI/CD流水线集成,构建一个高效、可靠的自动化开发工作流。 ## 什么是repo-automation-bots? repo-automation

gitblog_00439的博客 735
上一篇: COM原理及应用---- 分布式COM(DCOM)
下一篇: COM原理及应用---- ActiveX控制
armman
博客等级 码龄21年 81粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值