[Win32] Ожидание завершения функции из DLL (WinAPI)05.09.01 11:49 Число просмотров: 895 Автор: доброжелатель :) Статус: Незарегистрированный пользователь
чаще всего такие эффекты говорят о твоём глюке
попробуй заменить MessageBox() на Sleep()
если твоё предположение верно (не успевают считаться данные) то исключение не должно появиться
хотя судя по msdn InternetReadFile() не должна работать асинхронно
запуская MessageBox() ты создаёшь цикл сообщений, т.е. огромное количество рекурсивных вызовов
если у тебя GUI приложение, то из этого цикла сообщений будут вызываться и процедуры других окон
Предисловие: Есть DLL в которой реализована функция GET для считывания страницы
с сайта. В ней используются ф-ии InternetConnect, InternetOpen, HttpSendRequest,
HttpQueryInfo и InternetReadFile.(wininet).
Библиотека статически подключается к приложению.
Теперь суть проблемы:
При вызове функции GET из программы происходят странные вещи:
если после функции есть MessageBox, показывающий полученное, то все проходит
гладко. В противном же случае, получаем исключение при дальнейшей обработке
полученных данных, что дает повод предположить о незавершенной передаче данных.
Каким образом вызов MessageBox позволяет дожидаться полного приема данных?
Как реализовать вызов, минуя, вызов MessageBox?
Заранее спасибо.
[Win32] Ожидание завершения функции из DLL (WinAPI)05.09.01 11:49 Автор: доброжелатель :) Статус: Незарегистрированный пользователь
чаще всего такие эффекты говорят о твоём глюке
попробуй заменить MessageBox() на Sleep()
если твоё предположение верно (не успевают считаться данные) то исключение не должно появиться
хотя судя по msdn InternetReadFile() не должна работать асинхронно
запуская MessageBox() ты создаёшь цикл сообщений, т.е. огромное количество рекурсивных вызовов
если у тебя GUI приложение, то из этого цикла сообщений будут вызываться и процедуры других окон
[Win32] Ожидание завершения функции из DLL (WinAPI)05.09.01 22:20 Автор: formatc Статус: Незарегистрированный пользователь
> чаще всего такие эффекты говорят о твоём глюке > попробуй заменить MessageBox() на Sleep() > если твоё предположение верно (не успевают считаться > данные) то исключение не должно появиться > хотя судя по msdn InternetReadFile() не должна работать > асинхронно > запуская MessageBox() ты создаёшь цикл сообщений, т.е. > огромное количество рекурсивных вызовов > если у тебя GUI приложение, то из этого цикла сообщений > будут вызываться и процедуры других окон
Sleep делу не помог - при его выполнении - встает и скачивание информации. Но что самое интересное, если на Sleep ставим breakpoint то скачивается все отлично, но если запускаем на полное выполнение - Access Violation - т.е. опять работа с пустой памятью...
Теперь дополню картину - может глюк в самой идее...
В dll функцию передаются параметры: структура с url и прочей информацией для пересылки и две ссылки на указатели, в которых, внутри dll, вычисляется размер буфера и выделяется память (malloc|realloc).
Т.е. указатели которые мы передаем становятся функциональными только после выполнения функции.
[Win32] Ожидание завершения функции из DLL (WinAPI)05.09.01 03:50 Автор: + <Mikhail> Статус: Elderman
> A kak na schet : > > InternetReadFileEx(...,HSR_SYNC ,...) А можно простенький примерчик по работе с этой функцией.
Я попробовал, но она у меня не работает...
[Win32] Ожидание завершения функции из DLL (WinAPI)06.09.01 00:35 Автор: + <Mikhail> Статус: Elderman