Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.19;
Скачать: CL | DM;

Вниз

Как поделить 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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.028 c
14-1093920830
КаПиБаРа
2004-08-31 06:53
2004.09.19
Помогите скачать файл


10-1038995997
Voronok
2002-12-04 12:59
2004.09.19
Зашел в тупик Я.


4-1091453480
Sur
2004-08-02 17:31
2004.09.19
ОЗУ


1-1094531711
Andrey V.
2004-09-07 08:35
2004.09.19
Как убрать каретку (Caret) в Мемо


1-1093943496
Wolfram
2004-08-31 13:11
2004.09.19
Непонятная проблема с timetostr