当用户想要将 OLE 项插入应用程序中时,OLE 将显示要从中选择的对象类型列表。 OLE 从系统注册数据库获取此列表,其中包含所有服务器应用程序提供的信息。 当服务器自行注册时,它放入系统注册数据库(注册表)中的条目描述它提供的每种类型的对象、文件扩展名和自身路径以及其他信息。
框架和 OLE 系统动态链接库(DLL)使用此注册表来确定系统上可用的 OLE 项类型。 OLE 系统 DLL 还使用此注册表来确定在激活链接对象或嵌入对象时如何启动服务器应用程序。
本文介绍每个服务器应用程序在安装时以及每次执行时需要执行的作。
有关系统注册数据库以及用于更新它的.reg文件的格式的详细信息,请参阅 OLE 程序员参考。
服务器安装
首次安装服务器应用程序时,它应注册它支持的所有 OLE 项类型。 还可以让服务器在每次作为独立应用程序执行时更新系统注册数据库。 如果移动服务器的可执行文件,则保持注册数据库 up-to-date。
注释
应用程序向导生成的 MFC 应用程序在作为独立应用程序运行时自动注册自己。
如果要在安装过程中注册应用程序,请使用 RegEdit.exe 程序。 如果将安装程序包含在应用程序中,请让安装程序运行“RegEdit /S appname.reg”。 (/S 标志指示无提示作,即它不显示报告命令成功完成的对话框。否则,请指示用户手动运行 RegEdit。
注释
应用程序向导创建的.reg文件不包括可执行文件的完整路径。 安装程序必须修改.reg文件以包含可执行文件的完整路径,或修改 PATH 环境变量以包含安装目录。
RegEdit 将.reg文本文件的内容合并到注册数据库中。 若要验证数据库或对其进行修复,请使用注册表编辑器。 请小心避免删除基本 OLE 条目。
服务器初始化
使用应用程序向导创建服务器应用程序时,向导会自动完成所有初始化任务。 本部分介绍手动编写服务器应用程序时必须执行的作。
当容器应用程序启动服务器应用程序时,OLE 系统 DLL 会将“/Embedding”选项添加到服务器的命令行。 服务器应用程序的行为因容器是否启动而有所不同,因此应用程序在开始执行时应做的第一件事是检查命令行上的“/Embedding”或“-Embedding”选项。 如果此开关存在,请加载一组不同的资源,这些资源显示服务器处于就地活动状态或完全打开状态。 有关详细信息,请参阅 菜单和资源:服务器添加。
服务器应用程序还应调用其 CWinApp::RunEmbedded 函数来分析命令行。 如果它返回非零值,则应用程序不应显示其窗口,因为它已从容器应用程序运行,而不是作为独立应用程序运行。 此函数更新系统注册数据库中的服务器条目,并调用 RegisterAll 成员函数,执行实例注册。
服务器应用程序启动时,必须确保它可以执行实例注册。 实例注册会通知 OLE 系统 DLL 服务器处于活动状态,并且已准备好接收来自容器的请求。 它不会向注册数据库添加条目。 通过调用由COleTemplateServer该服务器ConnectTemplate定义的成员函数执行服务器的实例注册。 这会将 CDocTemplate 对象连接到 COleTemplateServer 对象。
该 ConnectTemplate 函数采用三个参数:服务器的 CLSID、指向 CDocTemplate 对象的指针,以及指示服务器是否支持多个实例的标志。 微型服务器必须能够支持多个实例,也就是说,服务器多个实例必须能够同时运行,每个容器都有一个实例。 因此,在启动微型服务器时为此标志传递 TRUE 。
如果要编写微型服务器,则始终由容器启动它。 仍应分析命令行以检查“/嵌入”选项。 命令行中缺少此选项意味着用户尝试将微型服务器作为独立应用程序启动。 如果发生这种情况,请在系统注册数据库中注册服务器,然后显示一个消息框,告知用户从容器应用程序启动微型服务器。
另请参阅
OLE
服务器
CWinApp::RunAutomated
CWinApp::RunEmbedded
COleTemplateServer 类