Word的COM加载项开发指南

所谓程序插件(add-in),是指根据主程序的SDK制作出的程序模块。这个模块必须做到以下两点:实现主程序SDK定义的某种接口(不一定是COM接口);必须以某种形式注册,如写入特定注册表信息或者存放在主程序规定的特定路径下。实现上述两点后,主程序运行时,就会根据注册方式找到插件模块,并根据实现的接口加载它。这样,程序插件就插入到主程序的运行进程中,并可以实现自己的功能了。

之前介绍的基于Word客户端的电子印章系统,就是典型的程序插件,它被加载到Word的进程,在Word的编辑环境中加入了自己的菜单,并实现了针对Word文档的签章、验证等功能。在这里插入图片描述
今天介绍一下它的实现过程,希望对大家以后做类似功能的开发有所帮助。

实现接口

因为Word程序插件是COM控件,所以在Word里把这种插件叫COM加载项。它需要实现类型库Microsoft Add-in Designer的接口IDTExtensibility2,这个类型库对应的文件是MSADDNDR.DLL,它默认的位置在:程序安装路径\Common Files\DESIGNER目录里,安装了微软的Office就会有此文件(其实IDTExtensibility2接口最开始是用于Visual Studio IDE工具的拓展开发的)。

首先需引用此类型库。如果使用VC开发,可以通过实现接口向导引用,如下图。在这里插入图片描述
注意,通过向导添加后,在stdafx.h里的输入语句是开发机器上MSADDNDR.DLL的绝对路径,比如:

#import “C:\Program Files (x86)\Common Files\DESIGNER\MSADDNDR.DLL” raw_interfaces_only, raw_native_types, no_namespace, named_guids, auto_search

因此,需要将#import 的内容改为使用类型库ID,如下:

#import “libid:AC0714F2-3D04-11D1-AE7D-00A0C90F26F4” raw_interfaces_only, raw_native_types, no_namespace, named_guids, auto_search

类型库ID可以通过在IDTExtensibility2接口上点击右键去到其定义MSADDNDR.tlh里查找。

当然,你也可以手工地在stdafx.h里加入上述语句,并在插件类的声明里加上如下实现接口声明:

public IDispatchImpl<_IDTExtensibility2, &__uuidof(_IDTExtensibility2), &LIBID_AddInDesignerObjects, /* wMajor = */ 1>.

如果是使用VB开发,直接添加引用即可。在这里插入图片描述
接下来就是实现接口了, IDTExtensibility2定义了五个接口函数用于插件与主程序的通信,其说明如下表:在这里插入图片描述
上述接口函数中,最重要的就是OnConnection和OnStartupComplete.在OnConnection的实现代码中,插件可以通过Object参数获得主程序对象,由此就可以访问主程序并调用其各种属性、方法。在OnStartupComplete中,因为此时已加载完毕,插件可以实现各种预定的功能了。其他接口可用于一些变量的初始化和内存释放工作,如果确实无事可做,直接返回即可。因此,我们可以在实现OnConnection接口的方法里获得Word程序对象,在实现OnStartupComplete接口的方法里访问、操作这个对象,从而实现插件的功能。至于Word程序对象有哪些属性方法等接口可以调用,就属于Word二次开发的内容了,本文不再展开。

注册插件

Word采用记录注册表方式注册插件,注册表位置如下:HKEY_CURRENT_USER\Software\Microsoft\Office\Word\AddIns或HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Word\Addins.

如果插件是对当前用户有效就用前者,如果对所有用户生效就用后者。如果是64位系统中安装的32位Word,那注册表路径相应改为HKEY_CURRENT_USER\Software\Wow6432Node \Microsoft\Office\Word\AddIns或HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node \Microsoft\Office\Word\Addins.

在上述注册表位置下,每一个插件为一个子项,插件类的ProgID为子项的名称,如下图:在这里插入图片描述
其中,“WordClient7.WordAddin”是插件的控件类名,常用的有以下几个键值

Description:插件的简短描述。

FriendlyName:是在“COM加载项”对话框中显示的插件名称。

LoadBehavior:插件的加载方式,它由以下几个值组合而成: 0表示不加载、1表示加载、2表示程序启动时采取动作、8表示需要时采取动作、16表示首次连接时采取动作。所以一般设置为3,表示Word启动时加载。

CommandLineSafe:标识插件是不是命令行安全的,一般设置成0.

按照上述方式设置注册表值后,插件就可以集成在Word中使用了。我们可以在Word的COM加载项窗口中管理这些插件,如下图。在这里插入图片描述
Excel、WPS也采用类似的插件注册方式。其中,高版本的WPS文字甚至可以直接使用Word的插件注册信息,作为其自身的插件。大家可以自行研究。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_45303938

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值