Outlook Add-in(COM加载项)技术指南(二)

<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>

Outlook Add-in(COM加载项)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

技术指南

2 COM加载项的开发过程

摘要:本章节详细介绍了Outlook Add-in插件的开发过程。

2.1.开发COM加载项

VB中,首先需要引用“Microsoft Add-in Designer”类型库,该库包含了一些COM加载项必需的界面。

其次,Visual Basic中需要“Implements IDTExtensibility<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chmetcnv unitname="”" sourcevalue="2" hasspace="False" negative="False" numbertype="1" tcsc="0"><b style="mso-bidi-font-weight: normal"><span lang="FR" style="FONT-SIZE: 10.5pt; COLOR: blue; FONT-FAMILY: Arial; mso-ansi-language: FR">2</span></b><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: Arial; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-ansi-language: FR">”</span></chmetcnv>。

更多信息

一个Office2000下的内部COM插件必须实现一个_IDTExtensibility2派发接口。

_IDTExtensibility2派发接口被定义在MSADDin Designer类型库(MSADDNDR.dll/MSADDNDR.tlb)中,它通常位于盘符>/Program Files/Common Files/Designer下。

_IDTExtensibility2接口中必须实现下面五个接口事件函数(一般只需编写OnConnectionOnDisconnection中代码)

<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False"><span style="mso-bookmark: _Toc67505317"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-family: 'Times New Roman'">2.1.1</span></span></chsdate>. IDTExtensibility2事件背景知识

IDTExtensibility2提供了5个将用于COM加载项的事件:

Ø OnConnection 装载插件到内存时处理(可以通过自动化在程序启动时自动装载插件)

Ø OnDisconnection 从内存中缷载插件时处理。

Ø OnStartupComplete 当应用程序启动时插件刚装载完成时处理。

Ø OnBeginShutdown 当应用程序关闭时插件刚缷载完成时处理。

Ø OnAddInsUpdate COM插件改变时处理。

下面我们一一介绍这些事件:

<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-fareast-font-family: 黑体">2.1.1</span></b></chsdate>.1. OnConnection事件

当第一次加载或者连接加载项时,例如Outlook启动时,或者当用户选择加载COM加载项时,将调用OnConnection事件。

OnConnection事件是获取或存储稍候将要在代码中使用的OutlookApplication队形最好的地方。

当发生OnConnection事件,将传递以下四个参数:

Application参数:是OutlookApplication的引用。

ConnectMode参数:COM加载项的加载方式。可以是以下常量中的一种:ext_cm_AfterStartup,ext_cm_CommandLine,ext_cm_External或者ext_cm_Startup。当Outlook启动时连接我们的加载项,这个参数被设置为ext_cm_Startup

AddInInst参数:传递引用COM加载项当前实例的对象。

Custom()参数:一个Variant数据类型的阵列,可以存储用户定义的加载项数。对于Office2000加载项,本参数忽略。

<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-FAMILY: Arial; mso-fareast-font-family: 黑体">2.1.1</span></b></chsdate>.2. OnDisconnection事件

COM加载项与应用程序断开连接时,将发生OnDisconnection事件。

当发生OnDisconnection事件,将传递以下两个参数:

RemoveMode参数:指定加载项的断开方式,它可以被设置为以下常量:ext_dm_HostShutdownext_dm_UserClosed。顾名思义,ext_dm_HostShutdown表示加载项通过关闭主机来断开;ext_dm_UserClosed表示用户在“COM加载项对话框中取消选中加载项的复选框或加载项的Connect属性被设置为False时断开加载项。

Custom()参数:一个Variant数据类型的阵列,可以存储用户定义的加载项数。对于Office2000加载项,本参数忽略。

可以使用OnDisconnection事件来恢复对应用程序所做的更改,或者执行常规的应用程序来清理操作。

确保撤销您创建的所有检测对象,因为如果这些对象仍旧存在,那么Outlook将无法正常关闭。

<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False"><b><span lang="EN-US" style="FONT-FAMILY: Arial; mso-fareast-font-family: 黑体; mso-bidi-font-family: 'Times New Roman'">2.1.1</span></b></chsdate>.3.OnStartupComplete事件

对于在启动主控应用程序时连接COM加载项的情况,当主机完成所有的启动例程时,将触发OnStartupComplete事件。如果用户在加载应用程序后从“COM加载项选择加载项时,不会发生OnStartupComplete事件。在这种情况下,将发生OnConnection事件。

该事件过程是将一些全局和本地变量设置为与它们相应的Outlook对象的好地方。

<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False"><b><span lang="EN-US" style="FONT-FAMILY: Arial; mso-fareast-font-family: 黑体; mso-bidi-font-family: 'Times New Roman'">2.1.1</span></b></chsdate>.4.OnBeginShutdown事件

当应用程序将要关闭并且在OnDisconnection事件之前调用时,将触发OnBeginShutdown事件。甚至在触发OnBeginShutdown事件之后,您仍然完全可以访问Outlook对象模型,因此您可以卸载对象之前保存注册表或者文件的设置,也可以保存对您的对象所做的修改。

<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False"><b><span lang="EN-US" style="FONT-FAMILY: Arial; mso-fareast-font-family: 黑体; mso-bidi-font-family: 'Times New Roman'">2.1.1</span></b></chsdate>.5.OnAddInsUpdate事件

当更新COM加载项的列表时,将触发OnAddInsUpdate事件。可以使用本事件来确保您的加载项所以来的其他加载项是连接的。

<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False"><span style="mso-bookmark: _Toc67505318"><span lang="EN-US" style="FONT-FAMILY: Verdana">2.1.2</span></span></chsdate>.我们实现的 IDTExtensibility2事件

<chsdate year="1899" month="12" day="30" islunardate="False" isrocdate="False"><b><span lang="FR" style="FONT-FAMILY: Arial; mso-fareast-font-family: 黑体; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: FR">2.1.2</span></b></chsdate>.1. IDTExtensibility2_OnConnection事件

OnConnection事件中,我们预先读取注册表,把默认参数读出来。

同时,通过调用

Set g_oApplication = Application

得到整个模型的根对象。

Disclaimers

Programmer’s Blog List

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 0.75pt; HEIGHT: 0.75pt" type="#_x0000_t75" alt=""></shape>

博客堂

小气的神

飞鹰手记 飞鹰手记之.NET专版

蝈蝈俊

思归

[MVPLeader]Grace Zhang

豆腐

跟随大象的舞步

Don Box's Blog

Eric.Weblog()

The .NET Guy

Blogs@asp.net

本文档仅供参考。本文档所包含的信息代表了在发布之日,zhengyun对所讨论问题的当前看法,zhengyun不保证所给信息在发布之日以后的准确性。

用户应清楚本文档的准确性及其使用可能带来的全部风险。可以复制和传播本文档,但须遵守以下条款:

  1. 复制时不得修改原文,复制内容须包含所有页

  2. 所有副本均须含有 zhengyun的版权声明以及所提供的其它声明

  3. 不得以赢利为目的对本文档进行传播




Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12755


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值