Нужно получить ответ на запрос за ИЕ. Я делаю так: Код (Text): res:=InternetQueryDataAvailable(hRequest,len,dwFlags,dwContext); repeat if (len<>0)and(res) then begin InternetReadFile(hRequest,pmem,len,bytes); //MessageBox(0,pmem,nil,0); memSize:=memSize+bytes; pMem:=Pointer(DWORD(pmem)+bytes); end else sleep(50); res:=InternetQueryDataAvailable(hRequest,len,dwFlags,dwContext); until (len=0)and(res); Но ИЕ все время зависает, но если поставить MessageBox после вызова InternetReadFile, то все работает как надо. Пробывал ставить всякие задержки вместо MessageBox, но ничего не помогает...
InternetReadFile(hRequest,pmem,len,bytes); bytes - это указатель на переменную, принимающую кол-во считаных байт. нужно так: InternetReadFile(hRequest,pmem,len,&bytes);
Sickle Где как, если она в прототипе объявлена, как var, то нет, а если в прототипе объявлена как указатель, PDWORD, то соответсвенно нужно передавать адрес, через @
Ну так может кто-то знает почему с MessageBox все работает, а если поставить вместо него задержку, то нет? В чем разница? Еще я заметил что если в самом начале поставить задержку секунды 2, то в 50% все работает. Я проследил, при зависании res=true, len=0, но при первом выполнении цикла получается считать некоторое количество байт всегда.
Ну у меня так всё работало Код (Text): result := GetMemory(1024); Ptr := 0; while true do begin if not InternetQueryDataAvailable(hPage, bw, 0, 0) then break; if bw = 0 then break; ReallocMemory(result, Ptr + bw); Len^ := Ptr + bw; if not InternetReadFile(hPage, Pointer(Cardinal(result) + Ptr), bw, bw) then break; if bw = 0 then break; Ptr := Ptr + bw; end