![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как быстро достать информацию по данному указателю ? [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]Чья функция твоя? Размер какого файла? С чего вдруг она возвращает какой то размер в виде указателя. Точнее с чего ты взял что это размер?