Форум: "Начинающим";
Текущий архив: 2010.04.04;
Скачать: [xml.tar.bz2];
ВнизСтранности сложения строк Найти похожие ветки
← →
romich © (2010-02-02 12:32) [0]
Buffer: array [0..1024] of Char;
InternetQueryDataAvailable(hResourceHandle, Size, 0, 0);
SetLength(strResult, Size);
strResult := "";
repeat
InternetQueryDataAvailable(hResourceHandle, Size, 0, 0);
if Size > 0 then begin
InternetReadFile(hResourceHandle, @Buffer, SizeOf(Buffer), Downloaded);
strResut:=strResult+String(Buffer);
end;
until Size = 0;
Проблема в следующем: первые два прохода цикла в strResult исправно складывается значение буфера. Потом, несмотря на то, что в буфере содержится текст, содержимое strResult никак не меняется уже до завершения цикла. Почему?
← →
KilkennyCat © (2010-02-02 12:41) [1]размер маловат
← →
romich © (2010-02-02 12:45) [2]~7Кб весит целевая страница. Таким же выставляется размер строки.
← →
Медвежонок Пятачок © (2010-02-02 12:50) [3]содержимое strResult никак не меняется уже до завершения цикла. Почему?
например потому, что оно меняется внутри ифа
или например потому, что в буфере пусто
← →
Медвежонок Пятачок © (2010-02-02 12:52) [4]А это что за хрень?
SizeOf(Buffer),
← →
romich © (2010-02-02 12:53) [5]Неужели самого себя нужно цитировать?
← →
oldman © (2010-02-02 12:53) [6]
> repeat
> if Size > 0 then begin
> end;
> until Size = 0;
Что это?
← →
Медвежонок Пятачок © (2010-02-02 12:55) [7]BOOL InternetReadFile(
__in HINTERNET hFile,
__out LPVOID lpBuffer,
__in DWORD dwNumberOfBytesToRead,
__out LPDWORD lpdwNumberOfBytesRead
);
И какая здесь связь с SizeOf(Buffer),
если SizeOf(Buffer) всегда равен 32?
← →
Медвежонок Пятачок © (2010-02-02 12:55) [8]32 битам или 4 байтам разумеется
← →
Anatoly Podgoretsky © (2010-02-02 12:58) [9]Медвежонок Пятачок © (02.02.10 12:55) [8]
1024 байта.
А вот то что нигде нет проверок на ошибки очень плохо.
← →
romich © (2010-02-02 13:11) [10]Я решил не загромождать код проверками на ошибки. Во время дебага видно, что буфер не пустой и иф отрабатывает нормально. По существу предложения будут?
← →
Anatoly Podgoretsky © (2010-02-02 13:16) [11]> romich (02.02.2010 13:11:10) [10]
Твое дело, можешь делать полностью неработоспособные или работающие при особых условиях программы, но к нам ты зачем же пришел, за чудом чтоли?
← →
romich © (2010-02-02 13:35) [12]Anatoly Podgoretsky, уж точно не за тем, чтобы объяснять значение новых слов или выслушивать сетования на незащищенность или неоптимизированность кода. Есть конкретный вопрос, на которой ожидается конкретный ответ. Если есть мысли по поводу интересующей меня проблемы - я их выслушаю, за этим я сюда и пришел. Если нет... И мое и ваше время дорого. Пока я не увидел ничего полезного в ответах.
← →
Медвежонок Пятачок © (2010-02-02 13:39) [13]repeat
InternetQueryDataAvailable(hResourceHandle, Size, 0, 0);
if Size > 0 then begin
//Далее идет вызов функции. Кому-то и зачем-то возвращается булевый результат. наверное это не просто так.
InternetReadFile(hResourceHandle, @Buffer, SizeOf(Buffer), Downloaded);
strResut:=strResult+String(Buffer);
ShowMessage("В буфере конечно что-то может и есть, но на самом деле там " + String(Buffer));
end;
← →
Anatoly Podgoretsky © (2010-02-02 13:45) [14]
> Пока я не увидел ничего полезного в ответах
Имеющий уши да услышит.
← →
Медвежонок Пятачок © (2010-02-02 13:46) [15]Есть конкретный вопрос, на которой ожидается конкретный ответ.
Никаких "странностей" сложения строк не существует.
Если в результате сложения двух строк одна из который не пуста результат сложения не меняется, значит второй операнд - это пустая строка.
← →
Anatoly Podgoretsky © (2010-02-02 13:48) [16]Ты еще расскажи ему как пользоваться отладчиком, вместо написания нормального кода.
← →
Медвежонок Пятачок © (2010-02-02 13:53) [17]отладчик - он тоже непростой. нужна нектороя сила духа чтобы верить ему и не верить глазам или своим ожиданиям.
а шоумессадж - оно почти на всех действует.
← →
12 © (2010-02-02 13:56) [18]
> отладчик - он тоже непростой. нужна нектороя сила духа чтобы
> верить ему и не верить глазам или своим ожиданиям.
воистину так :)
http://delphimaster.net/view/2-1265010530/
← →
romich © (2010-02-02 14:23) [19]Очевидно, помещение темы в ветку "Начинающим" приводит к предвзятости отвечающих. Прежде всего:
> Далее идет вызов функции. Кому-то и зачем-то возвращается
> булевый результат. наверное это не просто так.
Не понимая сути происходящего зачем пытаться отвечать?
> Если в результате сложения двух строк одна из который не
> пуста результат сложения не меняется, значит второй операнд
> - это пустая строка.
Какая жалость... Может, мне приложить скриншоты отладчика или твоего любимого ShowMessage(), друг?
> Имеющий уши да услышит.
Покажи глухому как звучит решение вопроса, раз пошла такая пьянка.
← →
Медвежонок Пятачок © (2010-02-02 14:28) [20]Ну приложи скриншоты для тех итераций когда результат не меняется
InternetReadFile(hResourceHandle, @Buffer, SizeOf(Buffer), Downloaded);
ShowMessage("буфер :" + String(Buffer)) ;
strResut:=strResult+String(Buffer);
ShowMessage("результат " + strResut);
← →
Медвежонок Пятачок © (2010-02-02 14:44) [21]Покажи глухому как звучит решение вопроса, раз пошла такая пьянка.
где анализ кода возврата internetreadfile (true/false)?
где проверка последнего вар-параметра lpdwNumberOfBytesRead на предмет сколько байт реально было прочитано?
← →
romich © (2010-02-02 14:49) [22]Ок, а ты только придумай как сделать скриншот месседжбокса, который не помещается на экране.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.04.04;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.005 c