Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как быстро достать информацию по данному указателю ? [D7, WinXP]


Фёдор Мегатронов ©   (2004-08-04 23:01:00) 

Вот есть у меня функция HttpQueryInfo ... с параметром HTTP_QUERY_CONTENT_LENGTH, чтобы она мне вернула размер файла.

Но она его возвращает в виде указателя (Pointer) , его она записывает в одну переменную...

вот. Как быстрее всего то число которое она на самом деле вернула (размер файла) вывести на форму в Label ??


Фёдор Мегатронов   (2004-08-07 20:57:00) [1]

Мастер я конечно ещё только начинающий кодер, но поверьте мне, сначала я лезу в книжку, коих у меня не мало, а только потом уже на форум.


Мастер   (2004-08-07 20:02:00) [2]

>Фёдор Мегатронов   (07.08.04 18:33) [13]

Может быть стоит немного теории почитать сначала?
Ведь в форуме не обучением базовым понятиям занимаются?


Фёдор Мегатронов   (2004-08-07 18:33:00) [3]

Тестировщица

по твоему методу всё компилиться ... и даже работает, только не правельно - он возвращает "0". Пробовал на разных серверах, всё равно Ноль. в чём может быть проблема ?


Тестировщица   (2004-08-07 14:21:00) [4]

>GrayFace ©   (07.08.04 10:21) [10] Зачем гадать? можно и в MSDN заглянуть
HttpQueryInfo is used to return response or request headers from an HTTP request.
You can retrieve different types of data from HttpQueryInfo:
strings (default)
SYSTEMTIME (for Data: Expires:, headers)
DWORD(for STATUS_CODE, CONTENT_LENGTH, and so on if HTTP_QUERY_INFO_NUMBER has been used)

BOOL WINAPI HttpQueryInfo(
HINTERNET hRequest,
DWORD dwInfoLevel,
LPVOID lpBuffer,
LPDWORD lpdwBufferLength,
LPDWORD lpdwIndex);
.....

lpBuffer
[in\out] Long void pointer to the buffer that receives the information.lpdwBufferLength
[in\out] Long pointer to a value that contains the length of the data buffer.


Бином Ньютоныч   (2004-08-07 11:07:00) [5]

Результаты вызова функций надо проверять. И ошибки анализировать.


GrayFace   (2004-08-07 10:21:00) [6]

Скорее всего так:
var TrueItemSize:Int64;

HttpQueryInfo(hUrl, HTTP_QUERY_CONTENT_LENGTH, @TrueItemSize, {dwBufferLen} 4, dwIndex);

Procedure ThreadClass.ItemSize;
begin
 Form1.Label4.Caption := IntToStr(TrueItemSize);
end;


Очень сомнительно, но возможно так:

var TrueItemSize:string;
SetLength(TrueItemSize,256);
HttpQueryInfo(hUrl, HTTP_QUERY_CONTENT_LENGTH, @TrueItemSize, {dwBufferLen} 256, dwIndex);

Procedure ThreadClass.ItemSize;
begin
 Form1.Label4.Caption := TrueItemSize;
end;


Тестировщица   (2004-08-07 07:05:00) [7]

мдя...так попробуй...
var
  TrueItemSize : DWORD;
....
HttpQueryInfo(hUrl, HTTP_QUERY_CONTENT_LENGTH, @TrueItemSize, dwBufferLen, dwIndex);

Procedure ThreadClass.ItemSize;
begin
Form1.Label4.Caption := IntToStr(TrueItemSize);
end;

ps/ Я ни разу не использовала эту функцию, НО...
Есть ли разница между буфером для приема информации и его адресом?


Фёдор Мегатронов   (2004-08-06 23:11:00) [8]

Label1.Text:=PChar(lpvBuffer) - когда делаещь так, то всё компилиться, но в место размера фаила - пустота.. тоесть лабел пуст ...

У меня так сделано

//ВТОРОЙ ПОТОК

var
   TrueItemSize : Pointer;

Procedure ThreadClass.ItemSize;
begin
Form1.Label4.Caption := PChar(TrueItemSize);
end;

...

hSession := InternetOpen('ACF-GET',PRE_CONFIG_INTERNET_ACCESS, nil, nil, 0);

hURL := InternetOpenURL(hSession, PChar(Form2.Edit1.Text), nil, 0, 0, 0);

HttpQueryInfo(hUrl, HTTP_QUERY_CONTENT_LENGTH, TrueItemSize, dwBufferLen, dwIndex);

...

при выводе на форму - ничего не выводиться


Palladin   (2004-08-06 02:20:00) [9]

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/httpqueryinfo.asp


Фёдор Мегатронов   (2004-08-05 16:51:00) [10]

Я думал что эта функция вам известна ..

функция из библиотеки Wininet возвращает информацию о файле в инете (на пример дату создания или изменения ...) . Мне нужно с помощью неё узнать размер файла.

но буфер для возврата значения она требует чтобы был типа Pointer.

Попробую сделать как GrayFace сказал.


GrayFace   (2004-08-05 14:12:00) [11]

KADAN ©   (05.08.04 1:49) [2]
ИМХО, плохой рассказ.


GrayFace   (2004-08-05 13:47:00) [12]

Label1.Text:=PChar(lpvBuffer) если речь идет о том, о чем речь вел Бином Ньютоныч - возвращается строка.
Label1.Text:=IntToStr(PInt64(lpvBuffer)^) если возвращается число.


Бином Ньютоныч   (2004-08-05 10:47:00) [13]

StrToInt(PChar(lpvBuffer)). Если конечно речь идет о функции из wininet.dll.


KADAN   (2004-08-05 01:49:00) [14]

Palladin прав
http://delphimaster.ru/vopros/index.html


Palladin   (2004-08-05 01:43:00) [15]

Чья функция твоя? Размер какого файла? С чего вдруг она возвращает какой то размер в виде указателя. Точнее с чего ты взял что это размер?


Наверх

Титульная страница Поиск, карта сайта Написать письмо