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
hWnd 和 pAsyncCompletion 都是非 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);
}