编写表单服务器代码

适用于:Outlook 2013 | Outlook 2016

可以将表单服务器视为以下内容:

  • 一个 Win32 程序,它通过标准 Windows 消息泵机制显示接口并处理 Windows 消息。

  • 一个 对象,该对象向 OLE 注册其类工厂,并由 OLE 自动化方法激活。

  • 一个 MAPI 对象,该对象遵循用于与其他 MAPI 组件交互的 MAPI 规则。

代码必须同时处理这三个广泛的要求。

有关注册表单服务器的类工厂的详细信息,请参阅Windows SDK中的 COM 和 ActiveX 对象服务部分。 处理 Windows 消息和显示接口是标准 Windows 编程技术,对 MAPI 表单没有任何特殊要求。 同样,Windows SDK提供了有关 Windows 编程的详细信息。 本文档包含实现所需和可选 MAPI 表单接口所需的内容,以便它们遵循 MAPI 规则与其他 MAPI 组件(主要是 MAPI 表单管理器和消息传递客户端应用程序)进行交互。

实现表单服务器时可以使用的所有接口都直接或间接派生自 OLE 基类 IUnknown。 这意味着,这些接口的所有实现都需要具有 QueryInterfaceAddRefRelease 方法。 如果使用多个继承在自己的一个新类中实现所有必需的接口,则可以为自己节省大量工作,以便使用的所有接口都可以共享所需 IUnknown 方法的单个实现。 有关详细信息,请参阅 IUnknown::AddRefIUnknown::QueryInterfaceIUnknown::Release 方法。 对于这些方法,MAPI 表单服务器没有特殊注意事项。

虽然并非所有 MAPI 表单接口对于所有表单服务器都是强制性的,但任何给定接口中的方法都是强制性的。 也就是说,如果选择实现特定接口,则必须实现 接口中的所有方法。 这与某些其他 MAPI 组件(例如消息传输)的情况不同。 幸运的是,MAPI 表单接口中的方法相对简单,因此实现所有这些方法不会给开发人员带来太大的负担。

MAPI 表单接口独立于用于创建表单服务器的开发工具类型。 这允许使用不同的开发工具创建表单。 唯一的要求是所有表单服务器都必须支持所需的 MAPI 表单接口。

并非所有表单服务器都需要与表单相关的所有 MAPI 接口。 可选接口允许实现大多数表单服务器不需要的一些高级表单函数。 下表列出了接口、它们的用途以及是否必须实现它们。

接口 说明 状态
IMAPIForm : IUnknown
客户端用于加载表单服务器、执行表单谓词和关闭表单服务器的主要接口。 这也是派生自 OLE IUnknown 的接口,用于通知其他 OLE 组件表单对象实现的接口。 必需
IPersistMessage : IUnknown
在将邮件加载到窗体对象以及从窗体对象保存邮件时使用。 必需
IMAPIFormAdviseSink : IUnknown
由窗体对象用来跟踪消息客户端状态,以及确定表单对象是否能够在文件夹中显示下一封或上一封邮件。 可选
IClassFactory
表单对象使用的 OLE 类工厂接口,以符合 OLE 类工厂机制。 必需
IMAPIFormFactory : IUnknown
如果表单服务器支持多种类型的表单,则使用。 在这种情况下, IMAPIFormFactory 接口允许客户端应用程序访问多个 IClassFactory 接口, (表单服务器支持) 表单服务器还必须实现的表单类型一个。 可选

另请参阅

开发 MAPI 表单服务器