![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странности сложения строк [D7, XP]
romich © (2010-02-02 12:32:00)
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 никак не меняется уже до завершения цикла. Почему?
romich (2010-02-02 14:49:00) [1]Ок, а ты только придумай как сделать скриншот месседжбокса, который не помещается на экране.
Медвежонок Пятачок (2010-02-02 14:44:00) [2]Покажи глухому как звучит решение вопроса, раз пошла такая пьянка.
где анализ кода возврата internetreadfile (true/false)?
где проверка последнего вар-параметра lpdwNumberOfBytesRead на предмет сколько байт реально было прочитано?
Медвежонок Пятачок (2010-02-02 14:28:00) [3]Ну приложи скриншоты для тех итераций когда результат не меняется
InternetReadFile(hResourceHandle, @Buffer, SizeOf(Buffer), Downloaded);
ShowMessage('буфер :' + String(Buffer)) ;
strResut:=strResult+String(Buffer);
ShowMessage('результат ' + strResut);
romich (2010-02-02 14:23:00) [4]Очевидно, помещение темы в ветку "Начинающим" приводит к предвзятости отвечающих. Прежде всего:
> Далее идет вызов функции. Кому-то и зачем-то возвращается
> булевый результат. наверное это не просто так.
Не понимая сути происходящего зачем пытаться отвечать?
> Если в результате сложения двух строк одна из который не
> пуста результат сложения не меняется, значит второй операнд
> - это пустая строка.
Какая жалость... Может, мне приложить скриншоты отладчика или твоего любимого ShowMessage(), друг?
> Имеющий уши да услышит.
Покажи глухому как звучит решение вопроса, раз пошла такая пьянка.
12 (2010-02-02 13:56:00) [5]
> отладчик - он тоже непростой. нужна нектороя сила духа чтобы
> верить ему и не верить глазам или своим ожиданиям.
воистину так :)
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1265010530&n=18
Медвежонок Пятачок (2010-02-02 13:53:00) [6]отладчик - он тоже непростой. нужна нектороя сила духа чтобы верить ему и не верить глазам или своим ожиданиям.
а шоумессадж - оно почти на всех действует.
Anatoly Podgoretsky (2010-02-02 13:48:00) [7]Ты еще расскажи ему как пользоваться отладчиком, вместо написания нормального кода.
Медвежонок Пятачок (2010-02-02 13:46:00) [8]Есть конкретный вопрос, на которой ожидается конкретный ответ.
Никаких "странностей" сложения строк не существует.
Если в результате сложения двух строк одна из который не пуста результат сложения не меняется, значит второй операнд - это пустая строка.
Anatoly Podgoretsky (2010-02-02 13:45:00) [9]
> Пока я не увидел ничего полезного в ответах
Имеющий уши да услышит.
Медвежонок Пятачок (2010-02-02 13:39:00) [10]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;
romich (2010-02-02 13:35:00) [11]Anatoly Podgoretsky, уж точно не за тем, чтобы объяснять значение новых слов или выслушивать сетования на незащищенность или неоптимизированность кода. Есть конкретный вопрос, на которой ожидается конкретный ответ. Если есть мысли по поводу интересующей меня проблемы - я их выслушаю, за этим я сюда и пришел. Если нет... И мое и ваше время дорого. Пока я не увидел ничего полезного в ответах.
Anatoly Podgoretsky (2010-02-02 13:16:00) [12]> romich (02.02.2010 13:11:10) [10]
Твое дело, можешь делать полностью неработоспособные или работающие при особых условиях программы, но к нам ты зачем же пришел, за чудом чтоли?
romich (2010-02-02 13:11:00) [13]Я решил не загромождать код проверками на ошибки. Во время дебага видно, что буфер не пустой и иф отрабатывает нормально. По существу предложения будут?
Anatoly Podgoretsky (2010-02-02 12:58:00) [14]Медвежонок Пятачок © (02.02.10 12:55) [8]
1024 байта.
А вот то что нигде нет проверок на ошибки очень плохо.
Медвежонок Пятачок (2010-02-02 12:55:00) [15]32 битам или 4 байтам разумеется
Медвежонок Пятачок (2010-02-02 12:55:00) [16]BOOL InternetReadFile(
__in HINTERNET hFile,
__out LPVOID lpBuffer,
__in DWORD dwNumberOfBytesToRead,
__out LPDWORD lpdwNumberOfBytesRead
);
И какая здесь связь с SizeOf(Buffer),
если SizeOf(Buffer) всегда равен 32?
oldman (2010-02-02 12:53:00) [17]
> repeat
> if Size > 0 then begin
> end;
> until Size = 0;
Что это?
romich (2010-02-02 12:53:00) [18]Неужели самого себя нужно цитировать?
Медвежонок Пятачок (2010-02-02 12:52:00) [19]А это что за хрень?
SizeOf(Buffer),
Медвежонок Пятачок (2010-02-02 12:50:00) [20]содержимое strResult никак не меняется уже до завершения цикла. Почему?
например потому, что оно меняется внутри ифа
или например потому, что в буфере пусто