Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.53 MB
Время: 0.042 c
14-1093701485
Князь Мышкин
2004-08-28 17:58
2004.09.19
Как вы считаете, были ли американцы?


4-1091325486
sensor
2004-08-01 05:58
2004.09.19
Нажать программно кнопку


1-1094306351
dmk
2004-09-04 17:59
2004.09.19
Application Messages


4-1091455570
kingdom
2004-08-02 18:06
2004.09.19
GDI vs DirectDraw


1-1094220978
bloodman
2004-09-03 18:16
2004.09.19
Еще 1 Легкий вопрос теперь про приведение типов.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский