Проблема с InternetSetStatusCalllback из WinInet
От: ting  
Дата: 03.07.02 05:47
Оценка:
Добрый день!

Описываю я вот такую функцию для Callback'а:

void __stdcall InternetCallback(
    HINTERNET hInternet,
    DWORD dwcontext,
    DWORD dwInternetStatus,
    LPVOID lpvStatusInformation,
    DWORD dwStatusInformationLength
)
{
  // тута код
}


Потом InternetOpen и пытаюсь к hInternet приделать эту фукцию:

DWORD dwErr;
hInternet = InternetOpen("my agent",
              INTERNET_OPEN_TYPE_PRECONFIG,
              NULL,
              NULL,
              0);
dwErr = GetLastError();

if (!dwErr)
{
  dwISC = InternetSetStatusCallback(hInternet,
            (INTERNET_STATUS_CALLBACK) InternetCallback);
  dwErr = GetLastError(); // Вот тут выдается код ошибки 5...
}


5 — это помоему Отказано в доступе...
Что я не так делаю?
Re: Проблема с InternetSetStatusCalllback из WinInet
От: Flea  
Дата: 03.07.02 06:29
Оценка:
Здравствуйте ting, Вы писали:

T>Добрый день!


T>Описываю я вот такую функцию для Callback'а:


T>
T>void __stdcall InternetCallback(
T>    HINTERNET hInternet,
T>    DWORD dwcontext,
T>    DWORD dwInternetStatus,
T>    LPVOID lpvStatusInformation,
T>    DWORD dwStatusInformationLength
T>)
T>{
T>  // тута код
T>}
T>


T>Потом InternetOpen и пытаюсь к hInternet приделать эту фукцию:


T>
T>DWORD dwErr;
T>hInternet = InternetOpen("my agent",
T>              INTERNET_OPEN_TYPE_PRECONFIG,
T>              NULL,
T>              NULL,
T>              0);
T>dwErr = GetLastError();

T>if (!dwErr)
T>{
T>  dwISC = InternetSetStatusCallback(hInternet,
T>            (INTERNET_STATUS_CALLBACK) InternetCallback);
T>  dwErr = GetLastError(); // Вот тут выдается код ошибки 5...
T>}
T>


T>5 — это помоему Отказано в доступе...

T>Что я не так делаю?


Нужно так:
hInternet = InternetOpen("my agent",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
INTERNET_FLAG_ASYNC);
Re: Проблема с InternetSetStatusCalllback из WinInet
От: Flea  
Дата: 03.07.02 06:29
Оценка:
Здравствуйте ting, Вы писали:

T>Добрый день!


T>Описываю я вот такую функцию для Callback'а:


T>
T>void __stdcall InternetCallback(
T>    HINTERNET hInternet,
T>    DWORD dwcontext,
T>    DWORD dwInternetStatus,
T>    LPVOID lpvStatusInformation,
T>    DWORD dwStatusInformationLength
T>)
T>{
T>  // тута код
T>}
T>


T>Потом InternetOpen и пытаюсь к hInternet приделать эту фукцию:


T>
T>DWORD dwErr;
T>hInternet = InternetOpen("my agent",
T>              INTERNET_OPEN_TYPE_PRECONFIG,
T>              NULL,
T>              NULL,
T>              0);
T>dwErr = GetLastError();

T>if (!dwErr)
T>{
T>  dwISC = InternetSetStatusCallback(hInternet,
T>            (INTERNET_STATUS_CALLBACK) InternetCallback);
T>  dwErr = GetLastError(); // Вот тут выдается код ошибки 5...
T>}
T>


T>5 — это помоему Отказано в доступе...

T>Что я не так делаю?


Нужно так:
hInternet = InternetOpen("my agent",
INTERNET_OPEN_TYPE_PRECONFIG,
NULL,
NULL,
INTERNET_FLAG_ASYNC);
Re[2]: Проблема с InternetSetStatusCalllback из WinInet
От: ting  
Дата: 03.07.02 07:35
Оценка:
Здравствуйте Flea, Вы писали:

F>Нужно так:

F>hInternet = InternetOpen("my agent",
F> INTERNET_OPEN_TYPE_PRECONFIG,
F> NULL,
F> NULL,
F> INTERNET_FLAG_ASYNC);

Ну в доках по WinInet API написано, что и для синхронного должно работать. Я пробовал так. Тоже самое.
Re[3]: Проблема с InternetSetStatusCalllback из WinInet
От: Flea  
Дата: 04.07.02 12:43
Оценка:
Здравствуйте ting, Вы писали:

T>Здравствуйте Flea, Вы писали:


F>>Нужно так:

F>>hInternet = InternetOpen("my agent",
F>> INTERNET_OPEN_TYPE_PRECONFIG,
F>> NULL,
F>> NULL,
F>> INTERNET_FLAG_ASYNC);

T>Ну в доках по WinInet API написано, что и для синхронного должно работать. Я пробовал так. Тоже самое.


Скорее всего, какие-то локальные проблемы у тебя..
Вот реально работающий код:

m_Session = InternetOpen(lpszAgent,
INTERNET_OPEN_TYPE_PRECONFIG,
NULL, NULL, INTERNET_FLAG_ASYNC);
if(!m_Session)
{
EventLog(EVENTLOG_ERROR_TYPE,
MSG_ERROR_START_INET,
"Could not start Internet session");
m_Session = NULL;
}
iscCallback = InternetSetStatusCallback(m_Session,
(INTERNET_STATUS_CALLBACK)Callback);
...

void __stdcall Callback(HINTERNET hInternet,
DWORD_PTR dwContext,
DWORD dwInternetStatus,
LPVOID lpvStatusInformation,
DWORD dwStatusInformationLengthD)
{
...
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.