名称服务

动态数据交换管理库 (DDEML) 使得服务器应用程序能够注册所支持的服务名称,并阻止 DDEML 向服务器的动态数据交换 (DDE) 回调函数发送不受支持的服务名称的 XTYP_CONNECT 事务。

以下主题介绍名称服务。

服务名称注册

通过将服务名称注册到 DDEML,服务器会通知系统中的其他 DDE 应用程序有新服务器可用。 服务器会调用 DdeNameService 函数并指定标识名称的字符串句柄来注册服务名称。 作为响应,DDEML 会将 XTYP_REGISTER 事务发送给系统中每个 DDEML 应用程序的回调函数(但在 DdeInitialize 函数中指定了 CBF_SKIP_REGISTRATIONS 筛选器标志的回调函数除外)。 XTYP_REGISTER事务会将两个字符串句柄传递给回调函数:第一个标识指定基服务名称的字符串,第二个标识指定特定于实例的服务的字符串。 客户端通常使用可用服务器列表中的基服务名称,以便用户可以从列表中选择服务器。 如果有多个实例正在运行,客户端将使用特定于实例的服务名称与服务器应用程序的特定实例建立对话。

服务器可以使用 DdeNameService 注销服务名称。 此函数会导致 DDEML 将 XTYP_UNREGISTER 事务发送到系统中的其他 DDE 应用程序,从而通知它们不能再使用该名称来建立对话。

服务器必须在调用 DdeInitialize 后立即调用 DdeNameService 来注册其服务名称。 在调用 DdeUninitialize 函数之前,服务器必须使用 DdeNameService 注销其服务名称。

服务名称筛选器

除了注册服务名称之外,DdeNameService 还允许服务器打开或关闭其服务名称筛选器。 当服务器关闭其服务名称筛选器时,无论函数中指定的服务名称是什么,只要任何客户端调用 DdeConnect,DDEML 就会向服务器的 DDE 回调函数发送 XTYP_CONNECT 事务。 当服务器打开其服务名称筛选器时,则仅当 DdeConnect 指定服务器在调用 DdeNameService 时指定的服务名称时,DDEML 才会将 XTYP_CONNECT 事务发送给服务器。

默认情况下,当应用程序调用 DdeInitialize 时,服务名称筛选器处于打开状态。 在服务器创建所需的字符串指针之前,此默认值可防止 DDEML 将 XTYP_CONNECT 事务发送到服务器。 服务器可以在调用 DdeNameService 中指定 DNS_FILTEROFF 标志,以关闭其服务名称筛选器。 DNS_FILTERON 标志将打开筛选器。