有关Office的对象模型,第1张

有关Office的对象模型,第2张

Office应用程序可以公开COM接口。例如,虽然您可以专注于Word文档对象并逻辑地、独立地实例化它,但在实践中,您将执行Word进程来提供该对象。但是如果您确实需要一个开发平台,您仍然希望平台的其余部分保持可用,即使您在特定的情况下只使用一个组件。您希望这个组件使用您需要的任何其他平台服务,而不是自己手动实例化这些服务。
在Office解决方案环境中,组件化适合用在哪里?许多客户构建他们自己的特定于领域的、可重用的组件,并将它们放在Office之上。例如,特定于投资银行功能的组件可以使用Excel计算引擎。该组件的解决方案端接口是特定于领域的,而平台端接口是特定于Excel的。这种抽象使得该组件可以在多个版本的Excel上工作,这通常正是客户所需要的。

或者,您可以构建一个可以重用而不影响宿主应用程序的通用组件。例如,看看UserControl,它使用Web服务在自定义任务窗格中显示数据。该控件可在多个办公应用程序中重用。

Office应用程序随着时间的推移不断发展,它们具有非常不同的功能集,因此不可避免地提供了不同的对象模型。尽管如此,应用程序之间仍有一些一致性。例如,大多数对象模型都有层次结构,根位置通常有一个应用程序对象。在Word中,可以从Application对象开始查找Documents集合,深化每个Document对象,然后深化每个Range对象。同样,在Excel中,可以从Application对象开始,向下移动到Workbooks集合,在集合中找到Workbook对象,然后获取工作簿中的每个Range对象。

此外,Visual Studio Tools for Office基于一致的强类型对象模型。你只需要看两个完全不同的Visual Studio Tools for Office解决方案(比如基于Excel文档的解决方案和基于Outlook应用程序的解决方案)就知道它们的一致性。这两种解决方案都有简单的启动和关闭方法,因此您可以专注于业务需求,而不用考虑主机应用程序的特性。虽然仍然可以完全访问底层对象模型,但是您可以选择在更高的抽象层次上工作。

Office的每个新版本都保持了非常高的向后兼容性。Office应用程序是COM服务器程序,COM提供了几个规则(比如接口持久性)来防止版本不兼容。办公室通常按照这些规则运行。所有的办公界面要么是双界面,要么是纯调度界面。纯vtable接口(包括通过扩展的双接口)是一个永久接口,但调度接口不是,因为它的可用特性集和签名可以在运行时找到(从而在以后绑定)。当一个新版本发布时,Office团队通常使用这个特性在接口的末尾添加额外的方法和属性。他们通常还会向现有方法添加新的可选参数。通过这些技术,Office可以保持向后兼容性。

另一种维护版本弹性的技术是使用松散类型。的典型示例是COM加载项必须实现的IDTExtensibility2接口。当Office应用程序加载外接程序时,该应用程序将调用IDT扩展性2:: ON连接,并传入表示宿主应用程序的松散类型的对象。英寸NET代码,此参数的类型为System。对象,而在C++中,它是一个通用的IDispatch指针。在运行时,它实际上是指向宿主应用程序提供的应用程序对象的指针。构建传统的共享外接程序时,向导生成的代码对宿主没有影响。这有两个优点:它允许附加组件在任何支持COM附加组件的应用程序和任何此类应用程序的任何版本中运行。

这种对宿主没有影响的模型的缺点是,松散类型和后期绑定通常有缺点:它们不能为涉及的特定类型提供设计时或编译时支持,因为这些类型在运行时之前是未知的。这很容易使编写的代码在运行时失败。此外,后期绑定会带来性能下降,因为每个方法调用都必须完成发现过程,以确定是否能在运行时实际找到匹配的方法。

使用时。NET Framework开发外接程序,可以继续使用这种松散的类型,但除非外接程序本身只提供对宿主没有影响的功能,否则它的优势将非常有限。只要加载项需要提供特定于宿主的功能,就可以使用宿主的特定于版本的主互操作程序集(PIA)。此外,您可以使用Visual Studio Tools for Office通过。NET代码。Visual Studio Tools for Office需要强类型,这不仅能给你带来编译时类型检查的好处,还能给你带来设计时的Intellisense & reg;和自动完成。强类型可以避免后期绑定的性能开销。

强类型化是否意味着失去版本的韧性?不一定。您可以为某个版本的Office构建一个松散类型的外接程序,它几乎肯定可以在更高版本的Office中完美地工作。使用时。NET Framework,虽然行为稍微复杂一点,但是可以得到同样的结果。的。为特定版本的Office PIA构建的. NET add-on在以后的版本中应该也能很好地工作。实际上,有两种方法可以实现这一点:附加组件使用为其构建的PIA版本,或者它为PIA部署绑定重定向,以便附加组件在运行时使用与安装的Office版本相对应的PIA的更高版本。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 有关Office的对象模型

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情