GetAppcConfig

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

语法

  
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 Server 兼容,必须指定模式名称,如下所示:

  • 非padded

  • 以 Null 结尾

  • ASCII 字符串

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

    pNumRemLu
    提供的参数。 指定整数变量的地址,如果 pRemLu 指定的缓冲区足够大,足以容纳所有远程 LU,则当函数完成时,该变量将包含将返回的远程 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,则完成消息将以以下形式到达:

    Message 参数 说明
    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);  
}