`
javatoyou
  • 浏览: 1072276 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

自动化(Automation)基础概念:二次开发接口(API)与插件(Addin)

阅读更多

二次开发接口(API)与插件(Addin)

许式伟 (版权声明)
2007-4-20

在前文,我们已经解释了:

而同时,我们经常也可能经常听到以下这些词语:

  • 自动化(Automation,COM Automation)
  • OA(办公自动化,Office Automation)
  • 二次开发接口(应用程序开发接口,Application Programming Interface,API)
  • 插件(Addin,Addon)

等等。本文试图解释这些概念。

自动化(Automation)顾名思义是指“让机器在没有人工干预的情况下自动完成特定的任务”。为了完成这一目标,自动化(Automation)技术的核心想法是,应用程序(Application)需要把自己的核心功能以DOM模型的形式对外提供,使得别人能够通过这个DOM模型来使用该应用程序的功能。这也就是我们通常说的应用程序编程接口——Application Programming Interface,简称API。为了与Windows API这样的编程接口区分开来,我们引入一个专有名词,叫“二次开发接口”。“二次开发”取意于“在现有应用程序基础上进行再开发”。其实如果你愿意把操作系统当作一个更大的应用程序的话,二次开发接口和Windows API并没有什么很大的本质上的差异(尽管我们知道Windows API并不是以COM组件方式提供的)。

理解了自动化(Automation),OA(办公自动化,Office Automation)就比较好解释,无非是应用程序特指办公软件而已。而OA是指办公(包括公文流转)系统的自动化。

在应用程序提供了编程接口(API)的前提下,典型情况下,我们有两种办法来使用这些API。方法一是把应用程序当作一个Server,通过API对外提供服务。在此情形下,应用程序只是作为一个EXE COM Server的服务程序而已。只要我们理解进程间的LPC或者RPC调用是怎么回事,那么一切就非常Easy。方法二是实现一个应用程序插件(Addin)。这种方法更有意思一些。首先,这是一种进程内的调用,效率非常好。其次,这是一种双向的通讯,应用程序通过它提供的插件机制感知到插件的存在,并且将插件加载上来;插件则是在获得活动权后,通过应用程序的API完成特定的功能。最后,也是最重要的,插件与应用程序融为一体,实际上是扩展了应用程序的能力,使得应用程序变得更为强大。

插件(Addins)的启动过程大体如下:

  1. 应用程序启动。通过注册表(或者存放于其他任何地方)获得插件列表。插件一般以 COM 组件形式提供,故此只要有一个插件的 CLSID 或者 ProgID 的列表就可以了。另外,插件的功能可以千差万别,但是他们需要统一实现一个接口,例如 _IDTExtensibility2 或者类似的东西。这个接口在下面的第二步就用到了。
  2. 遍历插件列表,创建并初始化各插件。关键是初始化。当然应用程序并不知道插件想做什么,它只是取得 _IDTExtensibility2(或者类似接口),调用其中的初始化函数(如 OnConnection)。
  3. 插件获得了初始化机会。注意,在初始化的时候,应用程序把自己的DOM模型的根接口(我们通常称为Application)传入。在 _IDTExtensibility2 中,根接口被定义为 IDispatch 类型,即 IDispatch* Application。但是实际上可以更通用,如IUnknown* Application。有了这个 Application 指针,插件就可以为所欲为,做它想做的事情,调用它想要调用的任何API。

从插件(Addins)展开来讲,可以讲非常多的内容。然而这不是本文的意图。所以关于这方面的内容,我们只能留待以后有机会继续这个话题。不过我还是忍不住把话题起个开头:由于插件(Addin)机制使得应用程序结构显得更为灵活,所以,越来越多的软件架构,追求一种超轻量的内核(也就是我们说的应用程序,之所以称为内核,是因为它是组织一切的核心),并把更多的功能通过插件(Addin)方式提供。超轻量的内核意味着需要解决一个额外的关键点:就是插件(Addin)不只是扩展应用程序的功能,也同时扩展了应用程序的API,这些API与原有内核的API无缝地结合在一起,从而使得整个系统可以滚雪球一样越滚越大。

分享到:
评论

相关推荐

    Revit2020 二次开发工具 AddinManager 和 RevitLookup 直接使用

    二次开发是Revit的核心功能之一,允许用户通过API(应用程序接口)来定制和扩展Revit的功能,以满足特定项目需求。本资源提供了两个重要的Revit2020二次开发工具:AddinManager和RevitLookup。 AddinManager是一个...

    Revit2018 二次开发工具 AddinManager 和 RevitLookup 直接使用

    总的来说,Revit2018的二次开发涉及到对Revit API的深入理解和利用,借助AddinManager和RevitLookup这两个工具,开发者可以更便捷地进行代码调试和模型分析。对于希望提升工作效率、实现定制化功能的Revit用户来说,...

    Revit2019 二次开发工具 AddinManager 和 RevitLookup 直接使用

    在Revit的二次开发过程中,AddinManager可以帮助开发者测试和调试他们的插件,而无需每次都重启Revit。通过将AddinManager放入指定的Revit添加-ins路径,用户可以快速访问和控制所有加载项,这对于开发和维护工作流...

    wps windows二次开发说明文档.rar

    在IT行业中,Windows平台上的应用程序开发是一项至关重要的任务,而WPS Office作为一款流行的办公软件套件,提供了丰富的API接口供开发者进行二次开发。本文将深入探讨“WPS Windows二次开发说明文档”的主要内容,...

    Excel Automation Addin

    总结,Excel Automation Addin是提升Excel功能和效率的有效工具,通过VS2008提供的强大开发环境,开发者能够创建出满足特定需求的自动化解决方案。这个源代码包不仅是一个学习实例,也是进一步定制和优化Excel功能的...

    RevitAPI_REVIT_Revit二次开发_chm_API_RevitAPI_

    RevitAPI是Autodesk Revit软件的开发接口,它允许程序员通过编程来扩展Revit的功能,实现自动化工作流程和定制化工具。Revit是建筑信息模型(BIM)软件,广泛应用于建筑设计、结构工程和机械工程等领域。RevitAPI...

    SolidWorks 插件, C# 二次开发

    Solidwork装配体,在插入零件时...在非标设计过程中,旋转零件寻找合适摆放位置操作经常用到,多步操作比较麻烦,所以这里开发了一个插件,用于装配体中没有约束的组件或零件,沿X、Y、Z轴旋转90度,且可以设置快捷键。

    word2007 addin 二次开发 C# Demo以及参考文档

    是学习博客园Allen Lee同学的文章“探索 Word 2007 开发”系列前三章时候写下源代码,望对那些和我一样刚开始学习研究word二次开发的同学有所帮助,下载后请先阅读readme.txt文档。

    Revit2016 二次开发工具 AddinManager 和 RevitLookup 直接使用

    总之,Revit2016的二次开发是通过Revit API进行的,借助AddinManager和RevitLookup这两个工具,开发者可以更有效地管理和调试自己的插件,提高工作效率,实现对Revit模型的深度定制。在实际应用中,开发者需要深入...

    CATIA二次开发C#参考代码

    而CATIA的二次开发是指通过编程接口(API)对软件进行定制化扩展,以满足特定用户需求或提高工作效率。这里的"CATIA二次开发C#参考代码"是针对这一领域的实践应用,提供了一些实用的代码示例。 在CATIA的二次开发中...

    C#插件框架addin_framework

    这些接口定义了插件必须实现的方法和属性,以确保它们与主程序兼容。开发者在编写插件时需要遵循这些接口,确保其功能能够无缝集成到主程序中。 2. **插件发现机制**: 主程序需要有一种方式来识别和加载可用的...

    REVIT二次开发.rar

    在Revit的二次开发中,C#语言是主要的编程工具,因为它与.NET Framework紧密结合,可以方便地创建与Revit API交互的程序。C#书籍可以帮助开发者深入理解语言特性,为Revit插件的编写打下坚实的基础。通过学习C#,...

    Revit AddInManager 2014 已编译

    Revit AddInManager 2014 是一个针对Autodesk Revit 2014的二次开发工具,它主要用于管理Revit的插件或称作应用程序接口(API)扩展。Revit是Autodesk公司推出的一款强大的建筑信息模型(BIM)软件,广泛应用于建筑...

    Addin Vsto Excel小插件

    2. **数据筛选**:Excel提供了一套完整的API供VSTO插件使用,开发者可以通过这些接口获取和操作数据。筛选功能通常是通过遍历工作表,根据用户指定的表头条件(比如文本、数字、日期等)筛选出满足条件的行。 3. **...

    Bentley 软件二次开发HelloWorld代码

    为了满足用户个性化需求和提高工作效率,Bentley提供了丰富的二次开发接口,允许开发者通过编程方式扩展其软件功能。本教程将聚焦于Bentley软件的二次开发,特别是通过“HelloWorld”项目来介绍基础步骤和概念。 ...

    addin额开发技术

    2. **API和框架**:大部分addin开发依赖于目标应用提供的API(应用程序接口)和框架,比如.NET Framework或Java的JAR包。这些API允许addin与主应用进行通信,执行命令或获取数据。 3. **协调下载...

    AddInManager压缩包

    标题中的“AddInManager压缩包”指的是一个包含了与Autodesk Revit二次开发相关的工具——AddInManager的压缩文件。这个工具对于Revit的初学者来说是十分重要的,因为它可以帮助他们更方便地管理和控制自定义的插件...

    revit 二次开发

    Revit二次开发主要是指基于Autodesk Revit平台进行的定制化开发工作,通过编写代码来扩展Revit的功能,实现自动化处理、参数化建模、模型信息管理等功能。具体来说,二次开发可以实现以下目标: 1. **实现95%的...

    《Autodesk Revit 二次开发基础教程》示例代码片段

    《Autodesk Revit 二次开发基础教程》是一本旨在帮助初学者掌握Revit API(应用程序接口)技术的书籍。Revit API是Autodesk Revit软件的编程接口,允许开发者通过编写自定义程序来扩展Revit的功能,实现模型的自动化...

Global site tag (gtag.js) - Google Analytics