科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道使用 C# 进行 Outlook 2003 编程的简介 1

使用 C# 进行 Outlook 2003 编程的简介 1

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文介绍了 Microsoft Outlook 2003 对象模型介,并探讨了如何使用 C# 编程语言生成 Outlook 识别的应用程序和 Outlook 外接程序。

作者:中国IT实验室 来源:中国IT实验室 2007年9月8日

关键字: Outlook C#

  • 评论
  • 分享微博
  • 分享邮件

  摘要: 本文介绍了 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
{
  // Assume this interface defines three methods named
  // One(), Two(), Three().
  [default] interface IMyComObject;
  // Assume this interface defines two methods named
  // Four(), Five().
  interface ISomeOtherInterface;
}

 

  结果是两个名为 MyComObject 和 MyComObjectClass 的 .NET 类类型。MyComObject 类型只公开 [default] 接口的成员。希望访问其他接口的功能时,需要执行显式转换(这将在后台触发对 IUnknown::QueryInterface() 的调用):

 // Create a new MyComObject.
MyComObject c = new MyComObject();
c.One();
// To call Four() or Five(), we need to obtain the
// ISomeOtherInterface explicity.
ISomeOtherInterface itfOther = (ISomeOtherInterface)c;
itfOther.Five();

 

  另一方面,如果利用 MyComObjectClass 类型,您就能够使用单个对象引用来访问每个接口中的每个成员:

 // Create a new MyComObjectClass.
MyComObjectClass c = new MyComObjectClass();
c.One();
c.Five();

 

  实际上,带 –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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章