Всем привет!
Проблема известная всем, я надеюсь. Но все-таки может кто знает как ее решить?
...
pInet = new CInternetSession(_T("One"));
try
{
pFile = pInet->OpenURL("http://www.dice.com");
}
catch(CInternetException* e)
{
if(e->m_dwError == 12007) // постоянно эта ошибка ERROR_INTERNET_NAME_NOT_RESOLVED
...
Когда открывается диалог Dial-Up жмем на Cancel или в программе пытаемся закрыть соединение
...
pInet->Close();
delete pInet;
...
Соединение не закрывается (если оно было открыто) или вообще непонятно какое состояние (когда жмем Cancel в Dial-Up)
delete pInet объект не удаляет, при повторном delete pInet возникает исключение Access Violation.
На CodeGuru обсуждается эта ситуация, но работающего решения нет. (Там предлагается перебор активных соединений и их закрытие RasEnumConnections, RasHangUp) Я имею в виду, когда жмем Cancel, то активных соединений нет.
Единственный выход закрывать приложение и опять его открывать. От MFC классов не хотелось бы отказываться.
Может кто знает чего на эту тему???
Был бы очень признателен за хотя бы малюсенькую подсказку...
Во, сам себе и отвечаю.
В общем, обойти эту проблему можно очень просто. Весь код, который отвечает за работу с Инет помещаем в отдельный exe-сервер. Отлавливаем все ошибки (при нажатии на Cancel вроде 12007), выгружаем сервер и все! Нажимай сколько хочешь Cancel в Dial-Up окне и все будет работать. Ошибка с незакрытием соединения с Инет не исправляется, а имитируется выгрузка приложения из памяти (все-таки где-то что-то открытое соединение закрывает).
Вот и все, а я мучался...