自动化使应用程序能够作在另一个应用程序中实现的对象,或公开对象,以便可以对其进行作。 自动化服务器是向其他应用程序(称为 自动化客户端)公开可编程对象(称为自动化对象)的应用程序。 自动化服务器有时称为自动化组件。
通过公开自动化对象,客户端可以通过直接访问服务器提供的对象和功能来自动执行某些过程。 当应用程序提供对其他应用程序有用的功能时,以这种方式公开对象是有益的。 例如,字处理器可能会公开其拼写检查功能,以便其他程序可以使用它。 因此,公开对象使供应商能够通过使用其他应用程序的现成功能来改进其应用程序的功能。
这些自动化对象具有属性和方法作为其外部接口。 属性是自动化对象的命名属性。 属性类似于C++类的数据成员。 方法是处理自动化对象的函数。 方法类似于C++类的公共成员函数。
注释
尽管属性类似于C++数据成员,但它们不可直接访问。 若要提供透明访问,请在自动化对象中设置一个内部变量,其中包含一对 get/set 成员函数来访问它们。
通过公开应用程序功能,通过通用、定义完善的接口,自动化可以采用单个常规编程语言(如 Microsoft Visual Basic)生成应用程序,而不是以各种特定于应用程序的宏语言生成应用程序。
支持自动化服务器
视觉C++和 MFC 框架为自动化服务器提供广泛的支持。 它们处理自动化服务器所涉及的大部分开销,因此你可以专注于应用程序的功能。
框架支持自动化的主要机制是调度映射,一组宏扩展为 OLE 的方法和属性所需的声明和调用。 典型的调度映射如下所示:
BEGIN_DISPATCH_MAP(CMyServerDoc, COleServerDoc)
DISP_PROPERTY(CMyServerDoc, "Msg", m_strMsg, VT_BSTR)
DISP_FUNCTION(CMyServerDoc, "SetDirty", SetDirty, VT_EMPTY, VTS_I4)
END_DISPATCH_MAP()
类向导和类视图有助于维护调度映射。 向类添加新的方法或属性时,Visual Studio 会添加一个对应的 DISP_FUNCTION
或 DISP_PROPERTY
宏,其中包含指示类名、方法或属性的外部名称和内部名称以及数据类型的参数。
“ 添加类 ”对话框还简化了自动化类的声明及其属性和作的管理。 使用“添加类”对话框向项目添加类时,请指定其基类。 如果基类允许自动化,则“添加类”对话框将显示用于指定新类是否应支持自动化的控件、是否为“可创建 OLE 可创建”(也就是说,是否可以在 COM 客户端的请求上创建该类的对象),以及 COM 客户端要使用的外部名称。
然后,“ 添加类 ”对话框创建类声明,包括指定的 OLE 功能的相应宏。 它还添加了用于实现类成员函数的框架代码。
MFC 应用程序向导简化了使自动化服务器应用程序脱离地面所涉及的步骤。 如果从“高级功能”页中选择“自动化”复选框,MFC 应用程序向导会将应用程序函数添加到应用程序的InitInstance
函数中,这些调用需要注册自动化对象并将应用程序作为自动化服务器运行。