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






3.83/5 (3投票s)
2000 年 1 月 10 日

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); } }
注意: 我删除了一些不重要的内容,请在使用此代码之前检查一下...