Вниз
Скачать: CL | DM;

Помогите с WinINet ом... :(   Найти похожие ветки 

← →
DillerXX ©   (2006-10-20 23:58) [0]

Как извесно ф-ция InternetQueryDataAvailable должна возвращать True при успехе, и False при неудаче. Но что делать если она постоянно возвращает false? В GetLastError лежит 997, что по МСДНу означает
ERROR_IO_PENDING
997 Overlapped I/O operation is in progress.
Что это может означать, где искать проблему?..
P.S. На всякий случай запостил в 2 конференции, всё же решить нужно как можно быстрее.


← →
Сергей М. ©   (2006-10-23 14:06) [1]

покажи код целиком..


← →
isasa ©   (2006-10-23 16:30) [2]

А посмотреть подробности.
До использования (InternetQueryDataAvailable) и чтения данных (InternetReadFile), но после посылки запроса (HttpSendRequest).

var i : longword;
...
 HttpSendRequest(hHTTP, nil, 0, nil, 0);
...
 HttpQueryInfo(hHTTP, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER, @i, ...);
 //i - Код состояния HTTP (200 - Ok! ... 400 Error. Not found ...)  
 ...
 HttpQueryInfo(hHTTP, HTTP_QUERY_RAW_HEADERS_CRLF, ...);//все заголовки в буфер, разделенные CR/LF
...
 HttpQueryInfo(hHTTP, HTTP_QUERY_CONTENT_LENGTH, ...); //  Retrieves the size of the resource, in bytes.


← →
seeker ©   (2006-10-23 16:52) [3]


> HttpQueryInfo(hHTTP, HTTP_QUERY_CONTENT_LENGTH, ...)

Ни очем не говорит...
важно что в тех параметрах которые под "...".


← →
isasa ©   (2006-10-23 17:05) [4]

seeker ©   (23.10.06 16:52) [3]
HTTP_QUERY_CONTENT_LENGTH говорит о том, что запихнуть в те параметры, которые под ... :)

Судя по [0], автор сабжа с MSDN знаком. :)


← →
seeker ©   (2006-10-23 17:19) [5]

procedure GetResponseIntHeaderProp(hRequest:pointer; API_FLAG: dword; var FuncResult:dword);
var Index:dword;

function InternalHttpQueryInfoAsInt(hRequest: HINTERNET; dwInfoLevel: DWORD; var Buffer: dword;
                                    var lpdwIndex: DWORD): boolean;
var
 lpvBuffer:pchar;
 lpdwBufferLength: DWORD;          
begin
 lpdwBufferLength:=4;
 getMem(lpvBuffer, lpdwBufferLength);
 try
   result:=boolean(HttpQueryInfo(hRequest, dwInfoLevel, lpvBuffer, lpdwBufferLength, lpdwIndex));
   if result then
      buffer:=pdword(lpvBuffer)^;
 finally
   freeMem(lpvBuffer, lpdwBufferLength);
 end;
end;

begin
 Index:=0;
 if not InternalHttpQueryInfoAsInt(hRequest,API_FLAG or HTTP_QUERY_FLAG_NUMBER ,Funcresult,Index) then
     FuncResult:=0;
end;

Приблизительно так...


← →
isasa ©   (2006-10-23 17:20) [6]

Поясню, что я имел ввиду. :)

При коде состояния 200(ну и там, чего-нибудь еще) просто тупо начать читать из потока InternetReadFile - ом, проверяя код возврата (BOOL) и lpdwNumberOfBytesRead


← →
isasa ©   (2006-10-23 18:19) [7]

Не. :)
Учитывая ....

MSDN
...
Remarks
You can retrieve the following types of data from HttpQueryInfo:

Strings (default)
SYSTEMTIME (for dates)
DWORD (for STATUS_CODE, CONTENT_LENGTH, and so on, if HTTP_QUERY_FLAG_NUMBER has been used)

If your application requires that the data be returned as a data type other than a string, you must include the appropriate modifier with the attribute passed to dwInfoLevel.


можно проще


var
   i : longword;   // type DWORD = Longword;
   bLen, hInd : longword;  
...
 bLen:=4;
 hInd:=0;
 HttpQueryInfo(hHTTP, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER, @i, bLen, hInd);
...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.046 c
2-1174024559
rommel
2007-03-16 08:55
2007.04.08
Свойство align


6-1161265246
Григорий
2006-10-19 17:40
2007.04.08
Тупое нажатие на кнопку


2-1174146949
Игорек
2007-03-17 18:55
2007.04.08
функция GetWindowContextHelpID


15-1173882328
eXPell
2007-03-14 17:25
2007.04.08
Как бы вы поступили?


2-1174038418
Двоишник
2007-03-16 12:46
2007.04.08
Определить название Button




   Наверх