<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
二次开发接口(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)的启动过程大体如下:
- 应用程序启动。通过注册表(或者存放于其他任何地方)获得插件列表。插件一般以 COM 组件形式提供,故此只要有一个插件的 CLSID 或者 ProgID 的列表就可以了。另外,插件的功能可以千差万别,但是他们需要统一实现一个接口,例如 _IDTExtensibility2 或者类似的东西。这个接口在下面的第二步就用到了。
- 遍历插件列表,创建并初始化各插件。关键是初始化。当然应用程序并不知道插件想做什么,它只是取得 _IDTExtensibility2(或者类似接口),调用其中的初始化函数(如 OnConnection)。
- 插件获得了初始化机会。注意,在初始化的时候,应用程序把自己的DOM模型的根接口(我们通常称为Application)传入。在 _IDTExtensibility2 中,根接口被定义为 IDispatch 类型,即 IDispatch* Application。但是实际上可以更通用,如IUnknown* Application。有了这个 Application 指针,插件就可以为所欲为,做它想做的事情,调用它想要调用的任何API。
从插件(Addins)展开来讲,可以讲非常多的内容。然而这不是本文的意图。所以关于这方面的内容,我们只能留待以后有机会继续这个话题。不过我还是忍不住把话题起个开头:由于插件(Addin)机制使得应用程序结构显得更为灵活,所以,越来越多的软件架构,追求一种超轻量的内核(也就是我们说的应用程序,之所以称为内核,是因为它是组织一切的核心),并把更多的功能通过插件(Addin)方式提供。超轻量的内核意味着需要解决一个额外的关键点:就是插件(Addin)不只是扩展应用程序的功能,也同时扩展了应用程序的API,这些API与原有内核的API无缝地结合在一起,从而使得整个系统可以滚雪球一样越滚越大。
分享到:
相关推荐
是学习博客园Allen Lee同学的文章“探索 Word 2007 开发”系列前三章时候写下源代码,望对那些和我一样刚开始学习研究word二次开发的同学有所帮助,下载后请先阅读readme.txt文档。
vs2008开发的excel automation addin源代码, 包括安装工程。 使用的时候有什么问题可以问我。
Excel Addin 开发指南 Excel.Add.in.Development.in.C.and.C.Plus.Plus.pdf
wps windows二次开发说明文档,内含Demo程序,可直接参考使用,有各种文档的操作API说明。包括wps文字 、wpp、ET格式的API手册。
文件已配置好,下载后解压缩,将里面4个文件放进路径C:\ProgramData\Autodesk\Revit\Addins\2020 即可
CAA二次开发数据库连接,全局Addin,对话框,命令简单描述创建。为简单易懂,做工粗糙,莫笑。欢迎交流
用VB进行的SoildWorks二次开发教材
按照 SolidWorks二次开发C#插件AngelSix 视频写了一遍代码。因为当时没有找到。这个是第一课的完成代码。 下面是这个视频的连接 ...
本资源是小虫自己编写的程序代码,主要供大家学习提高。...主要是自己之前在网上没有发现现成的宗地四至赋值二次开发学习资源,所以自己花时间写了一个插件。可能不如其他大神写的好,希望多多指正批评。
ArcGIS Desktop扩展方式Addin
插件(AddIn),实际上是一个组件(COM),...其实用VS.NET来开发Office插件,是不需要关心这些问题的,因为在建立插件项目的同时,会建立一个此插件项目的安装项目,用此安装项目就可以自动执行在注册表中添加这些项目。
autodesk revit 2014 二次开发工具插件AddInManager2014
Autodesk Revit二次开发工具插件 Revit AddInManager 2017
vs addin 开发例子 源代码 描述要大于20字
Bentley MSTN V8i C# Addin 二次开发时整理的一些方法 1.动态获取精确绘图坐标系,并动态旋转 2.GetElementByID Method 3.SelectElements Method 4.MsdMemberTraverseType Enum 5.选中元素 6 已知Rotation 求绕各个...
CATIA二次开发C#参考代码,这种网络上很难找的,这是我实际应用中做的。
Autodesk revit 二次开发初级入门工具必备 AddInManager
autodesk revit 二次开发工具插件 revit AddInManager2015
描述:VB6 IDE 函数过程错误处理代码自动添加插件(VB6IDE_InsertErrHand_Addin) 安装方法: 1.点击菜单“工程-引用”,选择这个dll 2.然后点击菜单“外接程序-外接程序管理器”,选择“Insert Error Hand”,把右...