Форум: "Основная";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
ВнизКак поделить Cardinal на Integer ? Найти похожие ветки
← →
Фёдор Мегатронов (2004-08-27 23:36) [0]Вот возвращает мне одна функция тип Cadrinal(DWORD)
(dwBuffer : DWORD)
мне его надо поделить на 1024 (чирбы байты превести в килобайты)
и вывести на форму...
IS := integer(@dwBuffer); на него не дайствует. IS я всё равно не могу поделить на 1024, хоть ты убейся. а мне надо .. подскажите пожалуйста
← →
GanibalLector © (2004-08-27 23:48) [1]а на кой IS := integer(@dwBuffer)?
Может так:
Cardinal(@dwBuffer)
← →
GanibalLector © (2004-08-27 23:58) [2]Не,[1] не верно.Пардон...
← →
3APA3A © (2004-08-28 00:53) [3]Какая функция?
dwBuffer - это адрес или значение?
Если адрес - какого размера блок данных?
← →
Германн © (2004-08-28 02:21) [4]Вы, пардон, что - озабочены EMail"ом?
Integer(dwBuffer/1024) - уже не проходит?
Или не проходит - IntToStr("одна функция тип Cadrinal(DWORD)"/1024); ?
← →
GuAV © (2004-08-28 03:29) [5]
> Integer(dwBuffer/1024) - уже не проходит?
Не проходит div надо. а тут можно и shr 10 да всё равно в shr скомпилится
← →
Фёдор Мегатронов (2004-08-28 12:13) [6]3APA3A
функция HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH, @dwBuffer, dwBufferLen, dwIndex)
@dwBuffer - это адрес на значение
dwBuffer : DWORD;
вобщем ну никак её не поделить.
← →
Cardinal © (2004-08-28 12:29) [7]Или я чего-то недопонял или все очень просто.
procedure TForm1.Button1Click(Sender: TObject);
var
c: cardinal;
a: integer;
begin
a := round(c/1024);
end;
← →
Фёдор Мегатронов (2004-08-28 13:16) [8]2Cardinal
inetitemsize : integer;
dwBuffer : Cardinal;
InetItemSize := round(@dwBuffer/1024);
пишет [Error] Thread1.pas(128): Operator not applicable to this operand type
← →
GuAV © (2004-08-28 14:39) [9]
> InetItemSize := round(@dwBuffer/1024);
InetItemSize := dwBuffer div 1024;
или как есть тока @ убери нефиг указатель делить
← →
Фёдор Мегатронов (2004-08-29 00:00) [10]dwBuffer оказываеться надо описывать как Pointer. 8)
{
Temp : string;
Temp := PChar(@dwBuffer);
так он возвращает 1832:6
}
{
Temp : integer;
Temp := Integer(dwBuffer);
так он возвращает 842217521
}
{
Temp : Integer;
Temp := Integer(@dwBuffer);
так он возвращает 14352216
}
ни одино из этих чисел и близко не похоже на файл
он весит 179кб, или 183296 байт.
что за фигня происходит ?
← →
GuAV © (2004-08-29 00:17) [11]
> HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH, @dwBuffer,
> dwBufferLen, dwIndex)
Описание покажи
← →
Фёдор Мегатронов (2004-08-29 00:25) [12]dwBufferLen, dwIndex : DWORD;
dwBuffer : Pointer;
dwBufferLen := 20;
dwIndex := 0;
HTTP_QUERY_CONTENT_LENGTH - флаг для этой функции, для того чтобы она возвращала размер файла (она ешё много чего может возвращать)
if HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH, @dwBuffer, dwBufferLen, dwIndex)
then
begin
Temp := PChar(@dwBuffer);
end;
Form1.Label8.Caption := (temp + "байт");
← →
GuAV © (2004-08-29 00:26) [13]
> Описание покажи
т.е., что по Ctrl+Click.
← →
Фёдор Мегатронов (2004-08-29 00:32) [14]function HttpQueryInfo(hRequest: HINTERNET;
dwInfoLevel: DWORD;
lpvBuffer: Pointer;
var lpdwBufferLength: DWORD;
var lpdwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM HttpQueryInfo}
← →
GuAV © (2004-08-29 00:48) [15]Попробуй объявить у себя как dwBuffer: PInteger, а читать Temp:=dwBuffer^;
← →
Фёдор Мегатронов (2004-08-29 00:52) [16]вывалился с исключением EAccess Violation и показал на эту строчку Temp:=dwBuffer^;
← →
GuAV © (2004-08-29 00:54) [17]Хм.. @ перед dwBufer убрал ?
← →
Фёдор Мегатронов (2004-08-29 00:58) [18]да, конечно.
← →
GuAV © (2004-08-29 01:02) [19]А уверен, что в dwBuffer возвращает, может в результат?
и попробуй ещё перед вызовом New(dwBuffer);
← →
Фёдор Мегатронов (2004-08-29 01:15) [20]Результат (по MSDNу) - это Булево значение, которые показывает прошли ли функция или нет. по этому я её через IF и вызываю.
попробывал с New(dwBuffer)
он мне вернул 9916608
чёрт .. у меня крыша едет...
я в одном факе видел использование этой функции. там было как PChar(@dwBuffer).
ещё правдо есть функция InternetQueryDataAvailable. но она берёт информацию из заголовков .. которая не всегда верная, точнее всегда не верная , поэтому я хочу использовать именно функцию HttpQueryInfo, хотя у меня закралось подозрение, что она тоже из хэадеров берёт размер файла...
← →
GuAV © (2004-08-29 01:19) [21]
> PChar(@dwBuffer).
может объяви буфер как pchar, сделай getmem(dwbuffer, dwbufferlen) bufferlen посиавь побольше...
← →
Фёдор Мегатронов (2004-08-29 01:27) [22]getmem как использовать ?
← →
GuAV © (2004-08-29 01:35) [23]
> getmem(dwbuffer, dwbufferlen)
dwbufferlen - это сколько dwbufferlen - скока памяти выделить под результат.
потом присвой строке этот pchar.
← →
Фёдор Мегатронов (2004-08-29 01:41) [24]я понимаю что dwBufferLen - это сколько памяти надо выделить.
я не понял как использовать твой getmem...
← →
GuAV © (2004-08-29 01:50) [25]getmem(dwbuffer, dwbufferlen);
dwbuffer - PChar
← →
Фёдор Мегатронов (2004-08-29 12:28) [26]@_@
можешь обьяснить что за функция getmem ? и куда она возвращает результат и какого типа
← →
GuAV © (2004-08-29 12:39) [27]getmem выделяет память в указанном объёме и возвращает в указатель (первый параметр).
← →
Фёдор Мегатронов (2004-08-29 13:10) [28]тоесть это как-бы инициализация ? и её надо вызывать до использования указателя?
← →
KSergey © (2004-08-29 13:17) [29]2 Фёдор Мегатронов
Ты адрес яндекса знаешь? Подсказать?
За 5 минут нашелся пример использования этой ф-ции
http://www.extractor.ru/forum/posting.php?mode=quote&p=2030&sid=72aa58724f5e1c924a1b4a734c2ea050
PS
Люди, надо что-то с кладовкой решать... Досадно в яндексе на 2-3 месте видеть ссылку на местную кладовку - но, увы, не иметь туда доступа..
По сегодняшним вопросам уже 2 ссылки в яндексе на кладовку было...
← →
begin...end © (2004-08-29 13:20) [30]
> [28] Фёдор Мегатронов (29.08.04 13:10)
После GetMem() указатель будет указывать на начало области памяти, которую ты можешь использовать (размер её ты также указываешь в GetMem).
Перед вызовом GetMem() указатель тоже на что-то указывает, но не на то, что тебе надо.
> [29] KSergey © (29.08.04 13:17)
Тут даже Яндекс не нужен. Достаточно в справку посмотреть.
← →
KSergey © (2004-08-29 13:25) [31]> [30] begin...end © (29.08.04 13:20)
> Тут даже Яндекс не нужен. Достаточно в справку посмотреть.
Не, ну бывает полезно посмотреть на реальный пример, особенно когда что-то недогоняешь.
Но, боюсь, вы ему сейчас все расскажете. Впрочем, будет на эту ветку ссылаться как на справочник по всем ф-циям по-русски ;)
← →
Фёдор Мегатронов (2004-08-29 14:02) [32]KSergey
как не странно, я нашел не один пример использования ЭТОЙ функции, но ни один из них корректно не работает. адрес яндекса я знаю.
Ну не работает оно так 8) ... чего у меня нет такого что есть у них ? я делал и так как там точ в точ и ещё много примеров видел. нигде не работает.
← →
begin...end © (2004-08-29 14:27) [33]
> [31] KSergey © (29.08.04 13:25)
> Не, ну бывает полезно посмотреть на реальный пример
В том то и дело, что в справке по ссылочке Example легко можно найти реальный пример использования GetMem :-)
← →
GrayFace © (2004-08-31 16:58) [34]Фёдор Мегатронов (29.08.04 0:32) [14]
function HttpQueryInfo(hRequest: HINTERNET;
dwInfoLevel: DWORD;
lpvBuffer: Pointer;
var lpdwBufferLength: DWORD;
var lpdwReserved: DWORD): BOOL; stdcall;
var Buffer:integer;
if HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH, @Buffer, dwBufferLen, dwIndex)
then
begin
Temp := IntToStr(dwBuffer);
end;
Может быть так:
var Buffer:string;
SetLength(Buffer,255);
if HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH, @Buffer, length(Buffer), dwIndex)
then
begin
Temp := Buffer;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.078 c