Ошибка при повторном использ-нии RasDial
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.81] |
|
|
Правила раздела Visual C++ / MFC / WTL (далее Раздела)
FAQ Раздела
Обновления для FAQ Раздела
Поиск по Разделу
MSDN Library Online
Ошибка при повторном использ-нии RasDial
|
|
|
|
|
Здравствуйте.
У меня такая проблемма: испоьзую RasDial для установления модемного соединения. Впринципе работает. Но только если соединение с первого раза не установиться (по любой причине) то потом, RasDial все время выдает ошибку номер 668 - "Подключение было прервано". И чтоб подключиться приходиться перезапускать прогу, что не самое оптимальное решение. Можно ли как-то это победить? Код установки соединения примерно такой: ![]() ![]() int frmConnectCSD::DialTo(LPTSTR DialName) { RASDIALPARAMS params; memset(¶ms,0,sizeof(RASDIALPARAMS)); LPRASENTRY lpRasEntry = NULL; DWORD dwBufferSize; RasGetEntryProperties(NULL, "", NULL, &dwBufferSize, NULL, NULL); lpRasEntry = (LPRASENTRY)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBufferSize); DWORD sz = sizeof(RASENTRY); params.dwSize = sizeof(RASDIALPARAMS); strcpy(params.szEntryName,DialName); int pas; RasGetEntryDialParams(NULL,¶ms,&pas); lpRasEntry->dwSize = dwBufferSize; RasGetEntryProperties(NULL, DialName, lpRasEntry, &dwBufferSize, NULL, NULL); strcpy(params.szPhoneNumber,lpRasEntry->szLocalPhoneNumber); DWORD dwRes = RasDial(NULL,NULL,¶ms,0L,NULL,&hRasConn); return dwRes; }; а после каждого соединеия (удачного или нет) я делаю ![]() ![]() try{RasHangUp(hRasConn);}catch(...){}; |
|
Сообщ.
#2
,
|
|
|
|
после каждого звонка(удачного или нет), делай
![]() ![]() BOOL HangUp() { DWORD dwRet; RASCONNSTATUS rStatus; ZeroMemory(&rStatus, sizeof(RASCONNSTATUS)); rStatus.dwSize = sizeof(RASCONNSTATUS); dwRet = RasGetConnectStatus(hRasConn, &rStatus); if ((dwRet != ERROR_INVALID_HANDLE) || (bDialNow)) { RasHangUp(hRasConn); dwRet = RasGetConnectStatus(hRasConn, &rStatus); CTime t1 = CTime::GetCurrentTime(); CTimeSpan ts; MSG msg; while (dwRet != ERROR_INVALID_HANDLE) { while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } Sleep(100); dwRet = RasGetConnectStatus(hRasConn, &rStatus); ts = CTime::GetCurrentTime() - t1; if (ts.GetTotalSeconds() > 3) break; } } Sleep(500); return TRUE; } |
|
Сообщ.
#3
,
|
|
|
|
после выполнения первого
![]() ![]() dwRet = RasGetConnectStatus(hRasConn, &rStatus); у меня dwRet == ERROR_INVALID_HANDLE, и, соответственно, я даже в if не попадаю. |
|
Сообщ.
#4
,
|
|
|
|
держи пример, правда там много лишнего.
Прикреплённый файл DialUper.rar (85.75 Кбайт, скачиваний: 138)
|
|
Сообщ.
#5
,
|
|
|
|
пример посмотрел. Нашел анологичные куски кода. У меня так же, только RasDial вызывается немного по другому. Нет CALLBACK функции обработки состояния соединения.
никак не могу понять. У меня dwRet == ERROR_INVALID_HANDLE. То есть соединение окончательно разорвано и все вернулось на свои места? |
|
Сообщ.
#6
,
|
|
|
|
Привет, попробуй так, у меня вроде нормально работает
![]() ![]() HangUp(HRASCONN hrasconn) { DWORD dwRet; RASCONNSTATUS rStatus; ZeroMemory(&rStatus, sizeof(RASCONNSTATUS)); rStatus.dwSize = sizeof(RASCONNSTATUS); //// Windows 2000, XP, if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) {RasHangUp(hrasconn);}//Sleep(800); /// Windows 95,98,Me if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { dwRet = RasGetConnectStatus(hrasconn, &rStatus); if (dwRet != ERROR_INVALID_HANDLE) { RasHangUp(hrasconn); MSG msg; while (dwRet != ERROR_INVALID_HANDLE) { while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } //Sleep(100); dwRet = RasGetConnectStatus(hrasconn, &rStatus); } } } } |
|
Сообщ.
#7
,
|
|
|
|
последний вариант тоже не оказывает положительного эффекта...
|
|
Сообщ.
#8
,
|
|
|
|
я выложил рабочий проект, сам когда-то им пользовался. убери все лишнее и юзай.
|
|
Сообщ.
#9
,
|
|
|
|
Не могу скомпилировать проект.
Выдается ошибка: c:\_NETwork\RAS\DialUper\DialUperDlg.cpp(377): error C2440: 'static_cast' : cannot convert from 'void (__thiscall CDialUperDlg::* )(WPARAM,LPARAM)' to 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)' в файле DialApperDlg.cpp |
|
Сообщ.
#10
,
|
|
|
|
ты открываешь dsp файл? если нет -открывай его. странно вообще-то...
|
|
Сообщ.
#11
,
|
|
|
|
П.С. У меня VS .NET
еще что я заметил: процесс svchost.exe загружается на 100% даже поле того как я выхожу из проги и приходиться перезагружать модем, что все нормализировалось. открываю DSP но он предлагает преобразовать проект, что я и делаю |