扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
摘要: 本文介绍了 Microsoft Outlook 2003 对象模型介,并探讨了如何使用 C# 编程语言生成 Outlook 识别的应用程序和 Outlook 外接程序。
作为对象模型的 Outlook 2003
在将应用程序的功能公开给外部程序方面,Microsoft 有很长的历史。例如,如果项目需要拼写检查功能,您可以利用从 Microsoft_ Word 公开的对象模型。以同样的方式,如果正在生成的应用程序需要 Microsoft_ Outlook_ 2003 提供的功能,则可以利用关联的对象模型。简单地说,Outlook 2003 对象模型允许您与下列各项交互:
· 电子邮件项。
· Outlook 联系人数据库。
· Outlook 日历。
· Outlook 注释和任务。
· Outlook 本身的UI(资源管理器、检查器、命令栏等)。
这显然是所包含功能的子集,但我肯定您有了大概的了解:可以通过关联的对象模型来访问 Outlook 2003 的功能。
Outlook 主互操作程序集 (PIA)
到目前为止,Outlook 的功能是通过一个基于 COM 的进程内服务器 (msoutl.olb) 来公开的。。NET 开发人员希望与这些 COM 类型交互,因此,您需要通过互操作层来这样做。Microsoft Corporation 已经提供了一个 Outlook 2003 附带的"正式的"互操作程序集(即主互操作程序集)。
该程序集已经强命名,并驻留在名称 Microsoft.Office.Interop.Outlook.dll 下面的全局程序集缓存中。要从 Microsoft_ Visual Studio_ .NET 2003 引用该程序集,请从"Add References"对话框访问"COM"选项卡,并选择"Microsoft Outlook 11.0 Object Library"(图 1)。
图 1. 引用 Outlook PIA
注 如果利用 Outlook PIA 的以前版本(或多个版本)生成自定义应用程序,一定要阅读 http://go.microsoft.com/fwlink/?LinkId=30833,该文讨论了某些可能的版本冲突。 有关互操作程序集的简介
任何互操作程序集的最终目标都是要提供外观与体验与原始 COM 类型相似的 .NET 类型。互操作层(结合运行库生成的代理,该代理的术语名称是"运行库可调用包装",即 RCW)处理各种关于封送处理数据类型的详细信息。例如,如果接口方法定义为接受一个基于 COM 的 BSTR 参数,则 .NET 开发人员可以自由传递基于 CLR 的 System.String.
对于每个 COM 类,互操作程序集包含总是带有"–Class"后缀的具体类型,以及名称相同的托管等价项。例如,以下 COM IDL 定义:
coclass MyComObject
|
结果是两个名为 MyComObject 和 MyComObjectClass 的 .NET 类类型。MyComObject 类型只公开 [default] 接口的成员。希望访问其他接口的功能时,需要执行显式转换(这将在后台触发对 IUnknown::QueryInterface() 的调用):
// Create a new MyComObject.
|
另一方面,如果利用 MyComObjectClass 类型,您就能够使用单个对象引用来访问每个接口中的每个成员:
// Create a new MyComObjectClass.
|
实际上,带 –Class 后缀的类型是原始 COM 类型的所有接口方法的联合。假定 Outlook 2003 coclass 最初旨在仅支持单个 [default] COM 接口,则通常可以忽略以 –Class 为后缀的类型,并利用名称相同的 .NET 代理。
注 如果希望更深入讨论 COM 到 .NET 的转换过程,访问 http://blogs.msdn.com/eric_carter/archive/2004/05/06/127698.aspx 将很有帮助。
关于从托管语言与 COM 类型的交互,最后一点与 CLR 垃圾收集器的角色有关。。NET 内存管理模型在本质上是不确定的,因为我们作为开发人员不会准确知道对象将在什么时候被销毁,而只知道它最终会被销毁。另一方面,COM 内存模型在本质上具有很麻烦的确定性,因为我们被迫使用各种 IUnknown::AddRef() 和 IUnknown::Release() 调用来手动调整对 COM 类型的对象内部引用计数(尽管 Visual Basic_ 6.0 试图隐藏这一点)。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者