На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Ошибка при повторном использ-нии RasDial
    Здравствуйте.
    У меня такая проблемма: испоьзую RasDial для установления модемного соединения. Впринципе работает. Но только если соединение с первого раза не установиться (по любой причине) то потом, RasDial все время выдает ошибку номер 668 - "Подключение было прервано". И чтоб подключиться приходиться перезапускать прогу, что не самое оптимальное решение. Можно ли как-то это победить?

    Код установки соединения примерно такой:
    ExpandedWrap disabled
      int  frmConnectCSD::DialTo(LPTSTR DialName)
      {
          RASDIALPARAMS params;
          memset(&params,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,&params,&pas);
          
          lpRasEntry->dwSize = dwBufferSize;
          RasGetEntryProperties(NULL, DialName, lpRasEntry, &dwBufferSize, NULL, NULL);
          strcpy(params.szPhoneNumber,lpRasEntry->szLocalPhoneNumber);
       
          DWORD dwRes = RasDial(NULL,NULL,&params,0L,NULL,&hRasConn);
          
          return dwRes;
      };


    а после каждого соединеия (удачного или нет) я делаю
    ExpandedWrap disabled
      try{RasHangUp(hRasConn);}catch(...){};
      после каждого звонка(удачного или нет), делай
      ExpandedWrap disabled
        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;
        }
        после выполнения первого
        ExpandedWrap disabled
          dwRet = RasGetConnectStatus(hRasConn, &rStatus);

        у меня dwRet == ERROR_INVALID_HANDLE, и, соответственно, я даже в if не попадаю.
          держи пример, правда там много лишнего.
          Прикреплённый файлПрикреплённый файлDialUper.rar (85.75 Кбайт, скачиваний: 138)
            пример посмотрел. Нашел анологичные куски кода. У меня так же, только RasDial вызывается немного по другому. Нет CALLBACK функции обработки состояния соединения.
            никак не могу понять. У меня dwRet == ERROR_INVALID_HANDLE. То есть соединение окончательно разорвано и все вернулось на свои места?
            Сообщение отредактировано: kleva -
              Привет, попробуй так, у меня вроде нормально работает
              ExpandedWrap disabled
                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);
                            
                        }
                        
                }
                }
                }
                последний вариант тоже не оказывает положительного эффекта...
                  я выложил рабочий проект, сам когда-то им пользовался. убери все лишнее и юзай.
                    Не могу скомпилировать проект.
                    Выдается ошибка: 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
                      ты открываешь dsp файл? если нет -открывай его. странно вообще-то...
                        П.С. У меня VS .NET
                        еще что я заметил: процесс svchost.exe загружается на 100% даже поле того как я выхожу из проги и приходиться перезагружать модем, что все нормализировалось.

                        открываю DSP но он предлагает преобразовать проект, что я и делаю
                        Сообщение отредактировано: kleva -
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0656 ]   [ 16 queries used ]   [ Generated: 8.04.26, 09:49 GMT ]