GetAppcConfig

GetAppcConfig 函数提供了一个异步入口点,用于检索特定本地 LU 可以连接到的远程系统。

Syntax

  
HANDLE WINAPI GetAppcConfig(   
HANDLE hWnd,  
LPSTR pLocalLu,  
LPSTR pMode,  
LPINT pNumRemLu,  
INT iMaxRemLu,  
PSTR pRemLu,  
LPINT pAsyncRetCode  
);  

参数

hWnd
提供的参数。 包含在调用完成后接收异步完成消息的窗口句柄。 如果为非 null,则完成消息将发布到此窗口句柄。 在这种情况下, pAsyncRetCode (最后一个参数)必须为 null。 建议使用 Windows 应用程序使用此函数的异步消息完成方法。

pLocalLu
提供的参数。 指定包含返回信息的本地 LU 名称的缓冲区的地址。 必须按如下所示指定此本地 LU 名称:

  • 非padded

  • Null 终止

  • ASCII 字符串

  • 最大长度为 8 字节(不包括终止符)

    若要请求使用用户的默认本地 LU,缓冲区应包含 8 个空格,后跟 null。

    pMode
    提供的参数。 指定包含返回信息的模式名称的缓冲区的地址。 在 Microsoft Host Integration Server 中,不使用此参数,但为了与早期版本的 SNA 服务器兼容,必须指定模式名称,如下所示:

  • 非padded

  • Null 终止

  • ASCII 字符串

  • 最大长度为 8 字节(不包括终止符)

    pNumRemLu
    提供的参数。 指定整数变量的地址,当函数完成时将包含将返回的远程 LU 数,如果 pRemLu 指定的缓冲区足够大,足以容纳所有远程 LU。

    iMaxRemLu
    提供的参数。 指定可由 pRemLu 指示的缓冲区保留的远程 LU 名称数。

    pRemLu
    提供的参数。 指定在函数完成后将保存远程 LU 名称的缓冲区的地址。 信息将作为字符串数组返回。 每个远程 LU 名称将存储在缓冲区中,如下所示:

  • 非padded

  • Null 终止

  • ASCII 字符串

  • 最大长度为 8 字节(不包括终止符)

    字符串在缓冲区中每 9 个字节开始一次,因此 (pRemLu + (i–1)*9) 提供第 i个字符串的开头。 如果缓冲区太小而无法容纳所有名称,将只返回 iMaxRemLu 字符串。

    pAsyncRetCode
    提供的参数。 指定用于存储此函数返回代码的整数变量的地址(如果提供的地址为非 null)。 返回代码将与异步完成消息返回的代码相同。 调用完成时,此变量的值将APPC_CFG_PENDING。 完成此异步调用后,此变量的值将包含除APPC_CFG_PENDING以外的一些返回代码。

    如果未使用异步消息完成到窗口句柄,则轮询完成此变量。

    请注意,如果使用 pAsyncRetCode,hWnd 必须为 null。

返回值

即时返回值的含义取决于是否接受异步请求。 若要测试接受,请计算表达式:

(<返回的句柄> 和APPC_CFG_SUCCESS)

如果表达式为 FALSE,则请求被拒绝。 然后,返回值是以下列表中的同步返回代码之一。 如果表达式为 TRUE,则接受请求,以下情况之一将适用。

  • 如果 hWnd 为非 null,则完成消息将以以下形式到达:

    消息参数 说明
    hWnd 目标窗口的句柄。 此值与初始调用中传入 hWnd 的值相同。
    uMsg 匹配调用 RegisterWindowMessage 返回的数字,并将 WinAppcCfg 用作标识字符串。 此字符串由 #define WIN_APPC_CFG_COMPLETION_MSG 提供。
    wParam 匹配从初始调用返回的 HANDLE 。 它用作关联器。
    lParam 在以下列表中包含一个异步返回代码。
  • 如果 pAsyncRetCode 为非 null,则将指定的整数变量设置为APPC_CFG_PENDING。 此函数异步完成之后,其值将更改为下面列出的异步返回代码之一。

同步返回代码

APPC_CFG_ERROR_NO_APPC_INIT
在调用 GetAppcConfig 之前,需要通过调用 WinAPPCStartup 来初始化 Windows APPC 库,但尚未执行此操作。

APPC_CFG_ERROR_INVALID_HWND
传入 hWnd 的句柄为非 null,但不是有效的窗口句柄。

APPC_CFG_ERROR_BAD_POINTER
hWnd 参数为 null,指示通过设置 pAsyncRetCode 指向的整数变量来指示完成,但 pAsyncRetCode 不是有效的指针。

APPC_CFG_ERROR_UNCLEAR_COMPLETION_MODE
hWndpAsyncCompletion 都是非 null 的,因此 GetAppcConfig 无法决定应如何发出完成信号。

APPC_CFG_ERROR_TOO_MANY_REQUESTS
处理了太多 GetAppcConfig 调用(目前,这表示 16 个请求未完成)。 延迟后重试呼叫。 对于 Microsoft Windows 版本 3。x 系统,在此期间必须生成。

APPC_CFG_ERROR_GENERAL_FAILURE
发生意外错误(可能是系统性质)。

异步返回代码

APPC_CFG_SUCCESS_NO_DEFAULT_REMOTE
已检索配置信息,并且未定义默认远程 LU,或者指定的本地 LU 无法访问该信息。

APPC_CFG_SUCCESS_DEFAULT_REMOTE
已检索配置信息,并且有一个默认的远程 LU,可通过指定的本地 LU 访问。

APPC_CFG_ERROR_NO_DEFAULT_LOCAL_LU
尝试检索与默认本地 LU 合作的远程 LU,但未配置默认本地 LU。

APPC_CFG_ERROR_BAD_LOCAL_LU
指定的本地 LU 未配置,或者对调用谓词无效。

APPC_CFG_ERROR_GENERAL_FAILURE
发生意外错误(可能是系统性质)。

注解

在使用 GetAppcConfig 之前,必须先调用 WinAPPCStartup

错误代码是否表示成功或失败,可以通过评估 (RetCode& APPC_CFG_SUCCESS) 来测试成功还是 (RetCode& APPC_CFG_FAILURE) 来测试失败。

以下代码片段显示了控制台应用程序如何测试完成:

while (*pAsyncRetCode == APPC_CFG_PENDING)  
{  
    sleep(250);  
}