65.9K
CodeProject 正在变化。 阅读更多。
Home

在没有错误的情况下调用 RasHangUp。

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.83/5 (3投票s)

2000 年 1 月 10 日

viewsIcon

107495

一种调用 RasHangUp 而不使应用程序或调制解调器挂起的方法

问题

RasHangUp 函数终止远程访问连接。连接通过 RAS 连接句柄指定。该函数释放与该句柄关联的所有 RASAPI32.DLL 资源。(MSDN)

然后,在备注中提到,应用程序应该休眠大约 3 秒,或者直到 RasGetConnectStatus 返回 ERROR_INVALID_HANDLE。 如果你仅仅调用 RasHangUp 并退出,可能会“挂起”调制解调器和 rnaapp(实现拨号服务的应用程序)。 此外,即使你按照 MSDN 中的描述执行所有操作,仍然可能会收到以下错误消息

RNAAPP 在模块 xxxx 中导致无效页面错误。

解决方案

当我编写我的 拨号拨号程序 时,这个问题一直是个挥之不去的罪恶,直到我找到一个在我的程序中有效的解决方案

DWORD dwRet;
RASCONNSTATUS rStatus;
ZeroMemory(&rStatus, sizeof(RASCONNSTATUS));
rStatus.dwSize = sizeof(RASCONNSTATUS);
dwRet = RasGetConnectStatus(hRasConn, &rStatus);
if (dwRet != ERROR_INVALID_HANDLE)
{
	RasHangUp(hRasConn);  // hRasConn - valid handle to the RAS connection
	MSG msg;
	while (dwRet != ERROR_INVALID_HANDLE)
	{
		while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
		{
	   		TranslateMessage(&msg);
		   	DispatchMessage(&msg);
		}
		dwRet = RasGetConnectStatus(hRasConn, &rStatus);
	}
}

注意: 我删除了一些不重要的内容,请在使用此代码之前检查一下...

© . All rights reserved.