实现Office的COM插件

ZDNet软件频道 时间:2003-08-11 作者:ZDNet China |  我要评论()
本文关键词:cpptips
当软件开发者考虑扩展Microsoft Office时,最常想到方法就是是使用VB了。实际上,用C++和ATL扩展Office是相当容易的。
本文译自Builder.com,未经许可请勿转载当软件开发者考虑扩展Microsoft Office时,最常想到方法就是是使用VB了。实际上,用C++和ATL扩展Office是相当容易的。

我将向你演示如何建立项目以及如何把Office插件作为COM对象注册到Office中去。(本文用Outlook来作为插件的主程序。)

项目的建立

让我们建立一个新的ATL项目。首先,添加一个叫着Plugin的简单COM对象。用类向导把_IDTExtensibility2接口添加到Plugin类中。(别忘了选中IsupportErrorInfo复选框。)

类向导会把下述方法添加到Plugin类中:OnConnection、OnDisconnection、OnAddinsUpdate、OnStartupComplete、OnBeginShutdown。本文只处理OnConnection和OnDisconnection方法。

然后,在Plugin头文件中创建一个类型定义(typedef,它只是用来简化代码的),如下所示:

#define APPID 102
class CPlugin;
typedef IDispEventImpl<APPID, CPlugin, &DIID_ApplicationEvents,
&LIBID_Outlook,9,0> OutLookSink;

我们现在需要在Plugin类的继承列表中添加OutLookSink类:

class ATL_NO_VTABLE CPlugin :
       public IPlugin,
       public IDispatchImpl<_IDTExtensibility2, &__uuidof(_IDTExtensibility2),
               &LIBID_AddInDesignerObjects, /* wMajor = */ 1, /* wMinor = */ 0>,
    public OutLookSink

在Plugin.h文件中为Mso9.dll和Msoutl9.olb引入声明,如下所示:

#import "C:Program FilesCommon FilesDesignermsaddndr.dll"
raw_interfaces_only,
raw_native_types, no_namespace, named_guids, auto_search

#import "C:Program FilesMicrosoft OfficeOfficemso9.dll"
rename_namespace("Office") named_guids

#import "C:Program FilesMicrosoft
 OfficeOfficemsoutl9.olb"
rename_namespace("Outlook"), raw_interfaces_only,
 named_guids

using namespace Office;
using namespace Outlook;

注意,你需要按照你的系统中的文件路径来修正上面那些被引入文件的路径。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134